IOCtlSocket Ruby Winapi
Posted
技术标签:
【中文标题】IOCtlSocket Ruby Winapi【英文标题】: 【发布时间】:2015-05-16 02:32:26 【问题描述】:好吧,我正在尝试使用 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 不会改变,无论我赋予它什么价值。
任何人有提示或解决方案?
【问题讨论】:
【参考方案1】:最后一个参数是一个指针。指针在 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")
【讨论】:
以上是关于IOCtlSocket Ruby Winapi的主要内容,如果未能解决你的问题,请参考以下文章
ioctlsocket 或 recv 在 Windows 套接字编程中需要更多时间来执行?
VC++ socket编程中设置socket选项的ioctlsocketsetsockopt和WSAIoctl函数的使用(附源码)