Actions
Bug #11958
closedTCPSocket.getsockopt().bool raises a TypeError on windows
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.7p400 (2015-08-18 revision 51632) [x64-mingw32]
Description
The following code snippet works as expected on linux (it returns "false"):
require 'net/http'
http = Net::HTTP.new('192.168.111.21', 8080)
http.start
socket = http.instance_variable_get(:@socket).io
socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).bool
But on windows, it raises this error:
TypeError: size differ. expected as sizeof(int)=4 but 1
from (irb):8:in `bool'
from (irb):8
from irb:11:in `<main>'
(TCPSocket.getsockopt().int
has the same problem.)
Digging a bit further, I noticed what socket.getsockopt().data
returns is platform-specific, despite Socket::Option.bool().data
being the same on both platforms.
On linux:
socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).data
"\x00\x00\x00\x00"
Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, false).data
"\x00\x00\x00\x00"
On windows:
socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).data
"\x00"
Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, false).data
"\x00\x00\x00\x00"
This might explain the size differ. expected as sizeof(int)=4 but 1
raised by getsockopt()
?
Actions
Like0
Like0Like0Like0Like0Like0