Форум: "Сети";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
ВнизПоведение сокета при отправке данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c