[#74190] [Ruby trunk Feature#12134] Comparison between `true` and `false` — duerst@...
Issue #12134 has been updated by Martin D端rst.
3 messages
2016/03/07
[#74269] Type systems for Ruby — Rob Blanco <ml@...>
Dear ruby-core,
5 messages
2016/03/10
[#74395] [Ruby trunk Feature#12142] Hash tables with open addressing — shyouhei@...
Issue #12142 has been updated by Shyouhei Urabe.
3 messages
2016/03/17
[ruby-core:74242] [Ruby trunk Bug#11958] TCPSocket.getsockopt().bool raises a TypeError on windows
From:
nagachika00@...
Date:
2016-03-09 13:46:03 UTC
List:
ruby-core #74242
Issue #11958 has been updated by Tomoyuki Chikanaga.
Backport changed from 2.0.0: REQUIRED, 2.1: DONE, 2.2: REQUIRED, 2.3: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE, 2.3: REQUIRED
Backported into `ruby_2_2` branch at r54067.
----------------------------------------
Bug #11958: TCPSocket.getsockopt().bool raises a TypeError on windows
https://bugs.ruby-lang.org/issues/11958#change-57377
* Author: Marc Fournier
* Status: Closed
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.1.7p400 (2015-08-18 revision 51632) [x64-mingw32]
* Backport: 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE, 2.3: REQUIRED
----------------------------------------
The following code snippet works as expected on linux (it returns "false"):
~~~ruby
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:
~~~ruby
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:
~~~ruby
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()` ?
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>