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


Reply via email to