Главная страница
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.056 c
14-1080076271
Andy BitOff
2004-03-24 00:11
2004.04.18
На банерах кликать надо?


1-1080888551
Relaxxx
2004-04-02 10:49
2004.04.18
Экспорт в Эксель(как заполнять сразу большие блоки)


3-1080018854
russko
2004-03-23 08:14
2004.04.18
Путь к БД


14-1080197122
zx
2004-03-25 09:45
2004.04.18
сайт


8-1072621227
Mkrivun
2003-12-28 17:20
2004.04.18
Как на канву вывести текст вертикально?