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

Вниз

Поведение сокета при отправке данных   Найти похожие ветки 

 
VID ©   (2004-06-06 14:38) [0]

Есть соединение клиента с сервером. Находятся на разных машинах, в разных сетях.

Внезапно сервер был выключен, даже можно сказать "убит" (принудительное завершение процесса).

И клиент думает что он до сих пор подключён к серверу.

Вопрос: что произойдёт при попытке отправки данных этим клиентом, уже не существующему серверу методом
Client.Socket.SendText() ?

Сгенерирует ли клиент событие OnError , или же всё произойдёт тихо, так будто бы всё нормально ?

If an error occurs while writing to the connection, SendText terminates the connection and raises an ESocketError exception. Не вселяет особого оптимизма.

Вот реализация отправки данных:

function TCustomWinSocket.SendBuf(var Buf; Count: Integer): Integer;
var
 ErrorCode: Integer;
begin
 Lock;
 try
   Result := 0;
   if not FConnected then Exit;
   Result := send(FSocket, Buf, Count, 0);
   if Result = SOCKET_ERROR then
   begin
     ErrorCode := WSAGetLastError;
     if (ErrorCode <> WSAEWOULDBLOCK) then
     begin
       Error(Self, eeSend, ErrorCode);
       Disconnect(FSocket);
       if ErrorCode <> 0 then
         raise ESocketError.CreateResFmt(@sWindowsSocketError,
           [SysErrorMessage(ErrorCode), ErrorCode, "send"]);
     end;
   end;
 finally
   Unlock;
 end;
end;


Result := send(FSocket, Buf, Count, 0);
Если ли гарантия что send вернёт SOCKET_ERROR в описанном выше случае ?

И ещё, что такое WSAEWOULDBLOCK ? (if (ErrorCode <> WSAEWOULDBLOCK) then)


 
VID ©   (2004-06-06 14:41) [1]

Клиент неблокирующий. Сервер тоже.


 
Digitman ©   (2004-06-07 08:13) [2]


> Если ли гарантия что send вернёт SOCKET_ERROR в описанном
> выше случае ?


есть


> что такое WSAEWOULDBLOCK


в дан.случае - код ошибки, показывающий, что ожидаемый результат операции записи не может получен немедленно - буфер записи гнезда заполнен и не может разместить затребованное для передачи число байт, указанных параметром ф-ции



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

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

Наверх




Память: 0.45 MB
Время: 0.027 c
3-1089802900
Alt
2004-07-14 15:01
2004.08.08
Table is busy


1-1090685460
Mental_Ray
2004-07-24 20:11
2004.08.08
работе с TThread


1-1090780744
Ландграф Павел
2004-07-25 22:39
2004.08.08
удаление элемента динамического массива


1-1090474894
seregin2
2004-07-22 09:41
2004.08.08
Отправка письма с помощью SendMail


3-1089562592
softmaster
2004-07-11 20:16
2004.08.08
Вопрос по FastReport...





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