non-blocking IO does not function correctly: connect_nonblock followed by an
IO.select
--------------------------------------------------------------------------------------
Key: JRUBY-5165
URL: http://jira.codehaus.org/browse/JRUBY-5165
Project: JRuby
Issue Type: Bug
Affects Versions: JRuby 1.5.3
Environment: repros under os x 10.6.4 with 1.6.0_22 and centos 5.4
with 1.6.0_21
Reporter: Marc Slemko
Assignee: Thomas E Enebo
Priority: Minor
After doing a connect_nonblock then it appears that IO.select will always
return immediately and indicate the socket is not writable, when it should
instead block and eventually return that it is writable, assuming the
connection succeeds.
Example below. Note that this does not appear to be a timing specific issue;
the sleep 5 gives it plenty of time to connect, and the select does not wait
for the timeout before returning. Presumably calling connect_nonblock again
updates some state that was out of sync.
>> @timeout=5
=> 5
>> @host='google.com'
=> "google.com"
>> @port=80
=> 80
>> addrinfo = ::Socket::getaddrinfo(@host, @port).first
=> ["AF_INET", 80, "pz-in-f99.1e100.net", "74.125.127.99", 2, 2, 17]
>> @handle = ::Socket.new(addrinfo[4], ::Socket::SOCK_STREAM, 0)
=> #<Socket:0x417470d0>
>> sockaddr = ::Socket.sockaddr_in(addrinfo[1], addrinfo[3])
=> "\020\002\000PJ}\177c\000\000\000\000\000\000\000\000"
>> @handle.connect_nonblock(sockaddr)
Errno::EINPROGRESS: Operation now in progress - Operation now in progress
from (irb):18:in `connect_nonblock'
from (irb):18
>> sleep(5)
=> 5
>> t=Time.now; IO.select(nil, [ @handle ], nil, @timeout); puts Time.now-t
0.001
=> nil
>> @handle.connect_nonblock(sockaddr)
Errno::EISCONN: Socket is already connected - Socket is already connected
from (irb):21:in `connect_nonblock'
from (irb):21
>> IO.select(nil, [ @handle ], nil, @timeout)
=> [[], [#<Socket:0x417470d0>], []]
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email