Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.026 c
8-1085246749
Dr.Alex
2004-05-22 21:25
2004.08.08
MPEG to AVI


4-1088110925
nick_mas
2004-06-25 01:02
2004.08.08
Как скопировать строку в Edit другого приложения?


14-1090192400
K.o.Z
2004-07-19 03:13
2004.08.08
Oxygen Phone Manager for Nokia


10-1026384652
А. Н. Оним
2002-07-29 17:34
2004.08.08
Возврат DCOM сервером строки


14-1090274838
Piter
2004-07-20 02:07
2004.08.08
Руссификация TTabControl




   Наверх