Changeset 141

Show
Ignore:
Timestamp:
05/25/06 15:39:29 (2 years ago)
Author:
blackhedd
Message:

TCP connects (nonblocking)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • experiments/machine/lib/machine/eio.rb

    r140 r141  
    186186end 
    187187 
     188##################################### 
     189 
     190module Machine 
     191class TcpConnectEventableIO < EventableIO 
     192 
     193  # We assume we're getting a TCP socket on which 
     194  # connect_nonblock has been called. 
     195  # DO NOT attempt to read the socket. 
     196  # When it selects writable, the connect has completed. 
     197  # 
     198  def initialize *args 
     199    super 
     200    @pending = true 
     201  end 
     202 
     203  def select_writable? 
     204    @pending ? true : super 
     205  end 
     206 
     207  def select_readable? 
     208    @pending ? false : super 
     209  end 
     210 
     211  def event_write 
     212    if @pending 
     213      @pending = false 
     214      send_event Event.new(:connect) 
     215    else 
     216      super 
     217    end 
     218  end 
     219 
     220end 
     221end 
     222 
     223 
  • experiments/machine/test/eio_test.rb

    r135 r141  
    1313  def setup 
    1414    #Reactor.instance.quiet 
     15    # Have a thread going, because it messes up Ruby's io.sysread function 
     16    Thread.new {sleep 1000} 
    1517  end 
    1618 
     
    1921 
    2022  def test_eio 
    21     sd = TCPsocket.new( "relay.spheriq.net", 25 ) 
    22     eio = EventableIO.new sd 
    23     eio.add_handler( :read ) {|data| 
    24       p data 
    25       eio.close_after_writing 
     23    sin = Socket::pack_sockaddr_in(25, "relay.spheriq.net") 
     24    40.times { 
     25    #sd = TCPSocket.new("relay.spheriq.net", 25) 
     26    #p "Connected" 
     27    #eio = EventableIO.new(sd) {|me| 
     28    sd = Socket.new( Socket::AF_INET, Socket::SOCK_STREAM, 0) 
     29    begin 
     30    sd.connect_nonblock sin 
     31    rescue Errno::EINPROGRESS 
     32    p "In progress!" 
     33    end 
     34    eio = TcpConnectEventableIO.new(sd) {|me| 
     35      me.add_handler(:connect) { 
     36        p "CONNECTED$$$" 
     37      } 
     38      me.add_handler(:read) {|data| 
     39        p "READ DATA: #{data.data}" 
     40      } 
     41      me.add_handler(:unbind) {|data| 
     42        p "UNBOUND" 
     43      } 
    2644    } 
     45    } 
     46 
    2747    Reactor.instance.run 
    2848