Malcolm
Зарегистрирован: 12.06.2004 Сообщения: 187 Откуда: Хабаровск
|
Добавлено: Пн Мар 13 2006 20:25 Заголовок сообщения: winsock, Connect после WSAASyncSelect завершается с ошибкой |
|
|
Код: | SocketHandle := winsock.Socket(AF_Inet, Sock_Stream, IPProto_TCP);
Addr.sin_family:=AF_Inet;
Addr.sin_addr.S_addr:=Inet_Addr( pansichar(FIP) );
Addr.sin_port:=HToNS(FPort);
FillChar(Addr.sin_zero,SizeOf(Addr.sin_zero),0);
code := WSAAsyncSelect(socketHandle, sockWindow, FMSG, FD_Read or FD_Write or FD_Close or FD_connect);
if code = 0 then code := winsock.Connect(socketHandle,Addr,SizeOf(TSockAddr));
if code = 0 then
begin
...
end else begin
FErrorCode := WSAGetLastError;
//Здесь ошибка 10038 WSAENOTSOCK
...
end;
|
в таком коде возникает ошибка 10038 WSAENOTSOCK, в Windows SDK по этому поводу написано следующее
Цитата: | Socket operation on non-socket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid. |
т.е. хендл вовсе не хендл. при этом дебаггером смотрел что значение handlesocket не изменяется после вызова WSAAsyncSelect, и завершается вызов без ошибки. а следом коннект - и ошибка. при этом если делать несколько вызовов WSAAsyncSelect подряд то ошибки ни на одном не возникают.
В чем может быть дело? не могу придумать никакого объяснения такому поведению .... _________________ АсЬки ТуТ |
|