Форум: "Сети";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c