Главная страница
    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
3-18
andreik
2002-03-06 11:28
2002.04.01
что писать в UpdateSQL?


1-154
FoxerMoxer
2002-03-21 18:44
2002.04.01
СРОЧНО!


14-287
Sir Alex
2002-02-04 19:44
2002.04.01
DMFC 1.1.003a ( вот что значит конкуренция!)


6-273
eblade
2002-01-16 22:18
2002.04.01
TClientSocket и переопределение OnConnect


1-150
СиндяшкинДВ
2002-03-21 07:13
2002.04.01
Поддержка DWG





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский