Вечер добрый. у меня есть слушающий асинхронный сокет: Код (Text): invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP mov hConListSock, eax invoke WSAAsyncSelect, hConListSock, hWnd, WM_CONSOCK, FD_ACCEPT or FD_READ далее, при подключении к нему, сокет, возвращенный ф-цией accept нужно перевести в блокирующий режим. я делаю так: Код (Text): invoke accept, hConListSock, 0, 0 mov hSock, eax invoke WSAAsyncSelect, eax, hWnd, WM_CONSOCK, 0 invoke ioctlsocket, hSock, FIONBIO, 0 ioctlsocket возвращает ошибку. в чем проблема?
делай так: Код (Text): invoke accept, hConListSock, 0, 0 mov hSock, eax invoke WSAAsyncSelect, eax, 0, 0, 0 invoke ioctlsocket, hSock, FIONBIO, 0 И вообще лучше не использовать WSAAsyncSelect, так как эта модель ввода-вывода сделана через ж..у и работает очень тормознуто. Используй WSAEventSelect или IoCompletionPorts
те же яйца, только в профиль создаю: Код (Text): invoke socket,AF_INET,SOCK_STREAM,IPPROTO_IP mov hConListSock, eax invoke WSACreateEvent mov dwEvents, eax invoke WSAEventSelect, hConListSock, dwEvents, FD_ACCEPT or FD_READ пытаюсь перевести в блокирующий: Код (Text): invoke accept, hConListSock, 0, 0 mov hSock, eax invoke WSAEventSelect, eax, 0, 0 invoke ioctlsocket, hSock, FIONBIO, 0 и опять ошибка после ioctlsocket "то я не так делаю?" (С)
Вот кусок кода на паскале, который 100% работает. Код (Text): procedure BlockSocket(Socket: integer); var Mode: dword; begin WSAEventSelect(Socket, 0, 0); Mode := 0; ioctlsocket(Socket, FIONBIO, Mode); end; procedure UnblockSocket(Socket: integer; Event: dword); begin WSAEventSelect(Socket, Event, FD_CLOSE); end; Мне кажется, проблема в том, что ioctlsocket нужно передавать указатель на переменную в которой храниться нужный режим, а ты передаешь просто 0.
Я осел! Код (Text): invoke ioctlsocket, hSock, FIONBIO, 0 не есть хорошо. ибо хорошо есть Код (Text): mov dwZero,0 invoke ioctlsocket, hSock, FIONBIO, addr dwZero всем спасибо! MS Rem, спасибо! мы с тобой одновременно свои сообщения послали... я только что додул до этой ошибки... действительно, в этом дело и было...