Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-84
Сержжж
2002-03-21 09:11
2002.04.01
Выделение не диапазона дат MonthCalendar


1-225
VJar
2002-03-20 16:10
2002.04.01
Текст скрытый звездочками


14-301
Донской
2002-02-19 13:13
2002.04.01
Delphi 5 and C++Builder


1-182
Duce
2002-03-19 17:39
2002.04.01
Application.Terminate хотелось бы выполнить своевременно...


1-90
Sergey Saf
2002-03-21 12:07
2002.04.01
Воспроизведение файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский