我想将我的 Winsock2 套接字从阻塞更改为非阻塞。而且我知道这可以通过调用ws2_32.dll库中的“ioctlsocket”函数来实现。但是我的实现未能达到其目的,返回值为 -1,这表示套接字错误。我尝试通过调用 WSAGetLastError 来检索错误代码,它返回 10014,我猜这与无效指针有关。在这种情况下,我的错是什么?我想这是我错误地声明或将值传递给 API 函数,但我不知道为什么。或者任何人都可以建议一种使套接字非阻塞的替代方法?
(由于某些原因,我不能使用 Ruby 的套接字类。)
这是我的代码(@fd 是我的套接字的描述符):
proc = Win32API.new("ws2_32", "ioctlsocket", "plp", "l") ret = proc.call(@fd, 0x8004667E, 1) # FIONBIO p ret => -1