Форум: "Сети";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
ВнизSocket Error 10038 Найти похожие ветки
← →
Gek1 (2005-04-18 15:10) [0]Ктото может разьяснить что ето за ошибка?
И где можно взять описание всех socket ошибок?
← →
Digitman © (2005-04-18 15:32) [1]значение параметра типа хэндл гнезда не являет собой значение хэндла реально существующего гнезда
← →
Gek1 (2005-04-18 15:45) [2]Хорошо .. а 10057 ... 10061 ?
Причина может быть в качестве связи или в программе?
← →
easy © (2005-04-18 15:59) [3]
showmessage(syserrormessage(10061));
← →
Gek1 (2005-04-18 16:05) [4]А кто мне скажет в чем причина может быть? В программе или в соединении?
← →
Digitman © (2005-04-18 16:15) [5]полный список winsock-отказов тебе ничего не даст
нужно четко понимать, какие конкретно отказы ассоциированы с тем или иным ВинСок-вызовом
впрочем "краткий список" для Winsock 1.1 Борланд тебе предоставил - модуль Winsock.pas, искать по ключ.слову "baseerr"
← →
Gek1 (2005-04-18 17:12) [6]Еще такой вопрос:
Есть у меня GameSocket - указатель на TClientSocket:
В случае если я ловлю ошибку а после обработки ошибки я хочу заново установить связь - как правильно делать:
Вариант а:
Просто GameSocket.Disconnect и потом GameSocket.Connect
Вариант б:
GameSocket.Disconect;
GameSocket.Free;
GameSocket := TSocketClient.Create(nil);
GameSocket.Connect;
Подразумевается что:
1. я обработаю ошибку и установлю ErrorCode := 0;
2. метод Connect будет выполнятся в блоке try ... except.
Так какой вариант правильнее?
(Если третий - то прозьба код и коментарии)
← →
Digitman © (2005-04-18 17:19) [7]
> после обработки ошибки
обработка ошибки вовсе не обязательно ведет за собой разрыв коннекта по инициативе обработчика ошибки
все зависит от логики обработчика
← →
Gek1 (2005-04-18 17:28) [8]
> Digitman © (18.04.05 17:19) [7]
После каких ошибок необходимо рвать связь и после каких нет необходимости?
Как правильно построить логику обработчика?
← →
Digitman © (2005-04-18 17:44) [9]
> Gek1 (18.04.05 17:28) [8]
не посмотреть ли тебе соотв. реализацию в модуле scktcomp.pas ?
в нем все это сделано крайне грамотно и крайне корректно ..
← →
Gek1 (2005-04-19 12:15) [10]Может ктото выложить этот файл в интернете? например на http://www.webfile.ru/ ...
Охота посмотреть, но у меня D2005 и его там нету.
← →
Digitman © (2005-04-19 12:27) [11]function TCustomWinSocket.ReceiveBuf(var Buf; Count: Integer): Integer;
var
ErrorCode: Integer;
begin
Lock;
try
Result := 0;
if (Count = -1) and FConnected then
ioctlsocket(FSocket, FIONREAD, Longint(Result))
else begin
if not FConnected then Exit;
Result := recv(FSocket, Buf, Count, 0);
if Result = SOCKET_ERROR then
begin
ErrorCode := WSAGetLastError;
if ErrorCode <> WSAEWOULDBLOCK then
begin
Error(Self, eeReceive, ErrorCode);
Disconnect(FSocket);
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(ErrorCode), ErrorCode, "recv"]);
end;
end;
end;
finally
Unlock;
end;
end;
← →
Gek1 (2005-04-19 12:45) [12]
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(ErrorCode), ErrorCode, "recv"]);
получается если я после обработчика не установлю ErrorCode:=0, то выползет окно с ошибкой.if ErrorCode <> WSAEWOULDBLOCK then
Если ошибка равна WSAEWOULDBLOCК, то он не считает за ошибку? А что это за тип таких ошибок?
И в случае если я рву связь - какой вариант предпочителен для моего случая? Вариант А или Б?
> обработка ошибки вовсе не обязательно ведет за собой разрыв
> коннекта по инициативе обработчика ошибки
Судя по коду - дисконнект произойдет сам не зависимо от того хочу я или нет. и мне дисконнект делать уже нет необходимости?
Что-то я слегка запутался. Кто-то может мне помочь расставить все по полочкам?
← →
Digitman © (2005-04-19 12:55) [13]см. http://book.itep.ru, раздел Winsock
там все тебя интересующее достаточно подробно описано и разжевано
← →
Gek1 (2005-04-19 13:20) [14]спасибо. :-)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c