Charles Oliver Nutter created JRUBY-6449:
--------------------------------------------
Summary: connect_nonblock + select needs to eventually
finishConnect
Key: JRUBY-6449
URL: https://jira.codehaus.org/browse/JRUBY-6449
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: Charles Oliver Nutter
Priority: Minor
Fix For: JRuby 1.6.7
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, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.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