IOCtlSocket Ruby WinAPI

IOCtlSocket Ruby Winapi

好吧,我正在尝试使用 ioctlsocket(FIONREAD) 获取要由 recv 读取的数据包的值,但是该函数没有返回任何值。

看:

IOCtlSocket = Win32API.new('ws2_32', 'ioctlsocket', 'llp', 'i') 

ret_val = -1
result = IOCtlSocket.call @descriptor, 0x4004667f, ret_val

if ret_val > 0 
print "Há pacotes a receber" 
end

ret_val 不会改变,无论我赋予它什么价值。

有人有提示或解决方案吗?

最后一个参数是一个指针。指针在 Win32API 中作为字符串实现。因此,您需要执行以下操作:

IOCtlSocket = Win32API.new('ws2_32', 'ioctlsocket', 'llp', 'i') 

ret_val_buf = " " * 4 #Prepare a 4-byte buffer
result = IOCtlSocket.call @descriptor, 0x4004667f, ret_val_buf
ret_val = ret_val_buf.unpack("L")