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


Reply via email to