Главная страница
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.013 c
3-57
sevylor
2002-03-08 05:30
2002.04.01
clone


4-361
Serg001
2002-01-30 10:24
2002.04.01
Как узнать классы всех окон, но только родительских


14-286
AriokH
2002-02-17 22:00
2002.04.01
Просто вопрос


1-202
interest
2002-03-20 08:55
2002.04.01
Переменные сохранить, а при запуске вернуть


3-3
andyfirst
2002-03-05 14:44
2002.04.01
Ошибка в запросе