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