Вниз
Скачать: 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.039 c
8-1085227370
ПсихЪ_клон
2004-05-22 16:02
2004.08.08
Поключение функции из C++ DLL в Delphi (DirectDraw Alpha Blendin)


9-1077481507
Bek
2004-02-22 23:25
2004.08.08
Очень срочно помогите с COLLISION


1-1090434297
GanibalLector
2004-07-21 22:24
2004.08.08
ШТРИХ-КОД


9-1082132972
Xerx
2004-04-16 20:29
2004.08.08
IDirectDrawSurface7 и цветовой ключ


1-1090761670
KaLLeKa
2004-07-25 17:21
2004.08.08
Как сохранить объект TFont в реестре




   Наверх