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

Вниз

Socket   Найти похожие ветки 

 
Maksss   (2004-02-17 18:04) [0]

создаю слиент сокет :
   I := inet_addr("168.192.0.126");
   if I = SOCKET_ERROR then  exit;
 IRCSock := socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
 aSockAddr_in.sin_addr.S_addr := i;
 aSockAddr_in.sin_family := PF_INET;
 aSockAddr_in.sin_port   := htons(6667);
 if connect(IRCSock, aSockAddr_in, SizeOf(aSockAddr_in)) = 0 then begin
 wsaasyncselect(IRCSock,mainhwnd,SM_SOCKET2,FD_READ or FD_CLOSE);
подключение прошло успешно!
далее приходит пакет
обрабатываю FD_READ и вызываю свою процедуру чтения,в которой есть довольно таки долгий цикл в котором не обрабатываю app.progresmessages как проверить не произошол-ли дисконект за время работы процедуры чтения? проверял простым обрывом соединения мессага клозе иногда не доходит.
проверить можно только так? :
i := send(socket,buf,Length(buf),0);
if i = -1 then begin
i := getlasterror;
if i <> WSAEWOULDBLOCK then произошол дисконнект
end;
это единственный способ?


 
Verg ©   (2004-02-17 18:26) [1]


> как проверить не произошол-ли дисконект за время работы
> процедуры чтения?


Закончив процедуру ты ведь снова пойдешь на цикл выборки-обработки сообщений. Если за время той твоей процедуры сокет потерял соединение, то сообщение с FD_CLOSE будет обязательно.


 
Verg ©   (2004-02-17 18:33) [2]


> проверял простым обрывом соединения мессага клозе иногда
> не доходит.


Да и кстати, посни чего сие значит. "Простой обрыв"?


 
Maksss   (2004-02-19 14:05) [3]

витую пару из сетевухи или модем от линии


 
Verg ©   (2004-02-19 14:16) [4]


> [3] Maksss   (19.02.04 14:05)
> витую пару из сетевухи или модем от линии


Тогда только попыткой записи данных в сокет.

В принципе, ядро само следит за "целостностью" соединений, если у сокета установить опцию SO_KEEPALIVE, но периодичность проверок очень большая (типа 2-х часов).

Можно еще попробовать новомодную штучку
SIO_KEEPALIVE_VALS

Которая

Enables the per-connection setting of keep-alive option, keepalive time, and keepalive interval. The argument structure for SIO_KEEPALIVE_VALS is as follows:
/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
   u_long  onoff;
   u_long  keepalivetime;
   u_long  keepaliveinterval;
};

т.е. может установить KEEPALIVE интервал персонально для данного соединения (сокета)



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
9-1063033980
Norlin
2003-09-08 19:13
2004.04.18
Как работать с векторами?


7-1076866144
AVGVI
2004-02-15 20:29
2004.04.18
Учетные записи в W2K


7-1077001550
Фикус
2004-02-17 10:05
2004.04.18
NT и HDD


11-1062428808
savva
2003-09-01 19:06
2004.04.18
OnException


14-1080319593
mmmaloy
2004-03-26 19:46
2004.04.18
Еще одна задача