Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.20;
Скачать: CL | DM;

Вниз

Sockets & TServiceApplication   Найти похожие ветки 

 
Lusha ©   (2003-01-31 17:30) [0]

Здравствуйте, господа!

У меня такая проблемка... Имеется консольное, работающее приложение. Используются Sockets... При попытке "оформить" его как TServiceApplication вся работа с сокетами приводит к исключительным ситуациям...

Подскажите, пожалуйста, в каком направлении "копать" для разрешения этой проблемки...

Заранее благодарен


 
Digitman ©   (2003-01-31 17:33) [1]

код-то, приводящий к искл.ситуации, приведи на всяк.случай)


 
Lusha   (2003-01-31 17:44) [2]

Сие проблематично... Код, немножко, на Си...
Ну, да ладно... Есть вот такой класс...

class connector {
public:
enum dirtype_t {in, out};
connector() : soc(INVALID_SOCKET) {}
~connector() {if (soc != INVALID_SOCKET) close();}

/** Performs connection */
void connect(const char *host, int port) {
addr.sin_family = AF_INET;

// Server address
addr.sin_addr.s_addr = inet_addr(host);
// Server port
addr.sin_port = htons(port);

// Creating socket
if ((soc = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
throw connector_exception("connector: can"t create socket");

// Perform connection
if (::connect(soc, (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR)
throw connector_exception("connector: can"t connect.");
}

/** Close the socket */
int close() {SOCKET tmp = soc; soc = INVALID_SOCKET; return ::closesocket(tmp);}
/** Send data */
int send(const char *buf, size_t size, int flags = 0) {
int rc = ::send(soc, buf, size, flags);
if (rc == SOCKET_ERROR || rc != (int )size)
throw connector_exception("error ocured during send operation.");
dump(buf, size, out);
return rc;
}
/** Receive data */
int recv(char *buf, size_t size = ALL_AVAILABLE, int flags = 0) {
int rc;
// Receive all data in channel
if (size == ALL_AVAILABLE) {
rc = ::recv(soc, buf, RECV_BUFSIZ, flags);
if (rc != SOCKET_ERROR)
{
dump(buf, rc, in);
return rc;
}
else throw connector_exception("error ocured during receive operation.");
}
else { // Receive fixed length chunk
size_t received(size);
while (received) { // Note that there is potentially unsafe operation.
// It might "hung" when no appropriate length data
// occured in channel.
rc = ::recv(soc, buf, received, flags);
if (rc && rc != SOCKET_ERROR) // 0 means that connection has been closed
// "gracefully"
received -= rc;
else
throw connector_exception("error occured during receive operation.");
}
dump(buf - size, size, in);
return size;
}
}

// get SOCKET
const SOCKET& operator ()() {return soc;}
void set_dump(const char *name) {dmp.open(name, ios::app);}
private:
ofstream dmp;
SOCKET soc;
struct sockaddr_in addr;
void dump(const char *buf, const size_t len, const connector::dirtype_t dir = out) {
if (!dmp) return;
dmp << ((dir == out) ? "> " : "< ");
for (int i = 0; i < (int)len; ++i)
dmp << hex << setw(2) << setfill("0") << (static_cast<unsigned short>(buf[i]) & 0xff) << " " << flush;
dmp << endl; }
};

После инициализации WSAStartup(MAKEWORD(1,1), &WSAData);
Вызов функции connect приводит к генерации исключительной ситуации, см. выше... "error ocured during receive operation."





 
Digitman ©   (2003-01-31 17:50) [3]

а это как может быть такое ?
ИС с таким сообщением ты выбрасываешь только при recv(), а при connect() - иной же текст, как я вижу из кода !



 
Lusha   (2003-01-31 18:06) [4]

Сорри, не оттуда строчку скопировал... Генерируется "Can"t connect to"... "error ocured during receive operation" - это следствие... =)

Мне интересно, есть ли какие нибудь ограничения на использование socket в TServiceApplication... Она прост наотрез отказывается коннектиться и все тут... =(


 
Lusha   (2003-01-31 19:11) [5]

Вопрос снят... Спасибо за содействие... =)



Страницы: 1 вся ветка

Текущий архив: 2003.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
3-63987
mic_2000
2003-02-27 12:41
2003.03.20
Помогите с IBTransaction.Commit разобраться


3-63990
SkyN
2003-02-28 10:43
2003.03.20
Для знающих программу Folio и структуру их БД


3-64050
Roki
2003-03-03 11:41
2003.03.20
Как увидеть подконектившхся юзверей?


1-64061
Alex-21
2003-03-08 11:00
2003.03.20
Memo1.Lines.Add


8-64239
S@M_vvv
2002-12-08 02:05
2003.03.20
Графика