Главная страница
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.05 c
3-1079611948
CTAC
2004-03-18 15:12
2004.04.18
Конвертация типов полей


9-1065787112
CoderZ
2003-10-10 15:58
2004.04.18
Вопрос про PowerDraw


14-1080429285
VID
2004-03-28 03:14
2004.04.18
Какие стадии мастерства существуют ?


1-1080380662
LastLamer
2004-03-27 12:44
2004.04.18
Pointer


11-1062913336
=Sniper=
2003-09-07 09:42
2004.04.18
Чё-то форум показываться нормально не хочет....