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

Вниз

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

 
anmak ©   (2001-11-02 16:49) [0]

Как возобновить работу умершего сокета?

Есть кусок кода в котором происходит облом.

FD_ZERO(fds);
FD_SET(S,fds);
case select(S+1,@fds,nil,nil,@one_second) of
SOCKET_ERROR: // error detected
begin
__close(s);
writeln("server down");
halt(1);
end;

Тык вот как вместо
__close(s);
writeln("server down");
halt(1);

заставить сервер работать поновой неотваливая узе зацепленные коннекты.


 
Digitman ©   (2001-11-05 12:50) [1]

После __close(s) (надо понимать, в нем происходит CloseSocket(s) ?) ни о какой "реанимации" текущего соединения с клиентом не может быть и речи - ты сам разорвал соединение с клиентом, не разобравшись в истинных причинах SOCKET_ERROR. В этом коде нигде нет анализа причин возникшей ошибки (см. WSAGetLastError).
И вообще непонятно, зачем нужно терминировать процесс сервера, если произошел всего лишь некритический отказ в коммуникации с одним из клиентов (другие-то активные клиенты в чем виноваты перед сервером, что он их всех сразу "кидает" из-за разрыва связи с каким-то одним ?)


 
anmak ©   (2001-11-05 14:12) [2]

да действительно.. зачем?
большое спасибо я киляние убрал


 
KPOT   (2002-01-22 13:59) [3]

Pishu malen"kuju programmku s Socketami, niznaju kak pral"na dejstvovat" v takoj situacii:

inogda na onReceive Socket.ReceiveLength bol"she chem vozvrachaemoje znachenie Socket.ReceiveBuf. Ja tak ponimaju chto znachit prislali mne bol"she chem ja s4ital :((

Kak i kogda ja mogu s4itat" ostatok ???

Zaranee blagodaren


 
Digitman ©   (2002-01-22 14:22) [4]

если имеется "остаток", вновь возникнет событие OnRead(). В его обработчике считывай очередную ожидаемую порцию, размером не больше чем ReceiveLength. Т.е., всякий раз при возникновении события OnRead() система сообщает тебе о доступности в буфере приема гнезда данных, действительно принятых на этот момент от партнера по коннекту, размером в ReceiveLength байт. Ты же сам в данный конкретный момент (момент обработки события OnRead) волен принимать решение о том, порцию какого необходимого размера тебе нужно считать из буфера (но не более, чем ReceiveLength байт)



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

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

Наверх




Память: 0.48 MB
Время: 0.008 c
3-69
Huliganka
2002-03-06 21:27
2002.04.01
Delphi & MS SQL server


1-185
JibSkeart
2002-03-17 16:28
2002.04.01
Как Узнать программно и можноли что у Файла досовская (Рус) кодировка ??


1-228
Nikolay
2002-03-20 16:54
2002.04.01
Немного о компонентах.


3-21
PeteDM
2002-03-05 16:54
2002.04.01
Interbase


1-247
AlexanderS
2002-03-20 23:31
2002.04.01
Как получить значение переменной окружения TEMP?