【发布时间】:2013-04-24 06:26:43
【问题描述】:
我尝试使用ioctlsocket 将我的套接字设置为非阻塞模式,但它返回-1 和WSAGetLastError 返回10045 - 不支持操作。为什么会这样?
我写的代码比较具体,因为它不是 C++,而是带有外语接口的 Lisp(它允许从 dll 中调用 C 和 C++ 函数),但实际上没关系,因为其他一切都可以工作。
代码如下:
(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 的指针,u_long 的值为1。
ioctlsocket 返回 -1,WSAGetLastError 返回 10045。
【问题讨论】:
标签: sockets winapi common-lisp wininet