Я пытаюсь установить свой сокет в неблокирующий режим, используя ioctlsocket
, но он возвращает -1
, а WSAGetLastError
возвращает 10045
- Операция не поддерживается. Почему такое могло случиться?
Код, который я пишу, довольно специфичен, потому что это не C ++, а Lisp с интерфейсом иностранного языка (он позволяет вызывать функции C и C ++ из dll), но на самом деле это не имеет значения, потому что все остальное работает.
Вот код:
(defconstant FIONBIO #x5421)
(setf socket-descriptor (socket AF_INET SOCK_STREAM IPPROTO_TCP))
...
(fli:with-dynamic-foreign-objects ((no-block (:unsigned :long) :initial-element 1))
(ioctlsocket socket-descriptor FIONBIO no-block))
...
socket-descriptor
- это просто дескриптор сокета, созданный стандартной функцией socket
FIONBIO
- константа, я нашел ее значение, просто погуглил
no-block
- указатель на u_long
, значение th u_long 1
.
ioctlsocket
возвращает -1, а WSAGetLastError
возвращает 10045.