IOCtlSocket Ruby Winapi

Ну, я пытаюсь получить значение пакетов, которые будут считаны recv с помощью ioctlsocket(FIONREAD), но функция не возвращает никакого значения.

Смотреть:

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 не меняется, какое бы значение я ему не присвоил.

У кого-нибудь есть советы или решение?


person user3571412    schedule 16.05.2015    source источник


Ответы (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")
person Codeguard    schedule 22.05.2015