Changeset 141
- Timestamp:
- 05/25/06 15:39:29 (2 years ago)
- Files:
-
- experiments/machine/lib/machine/eio.rb (modified) (1 diff)
- experiments/machine/test/eio_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
experiments/machine/lib/machine/eio.rb
r140 r141 186 186 end 187 187 188 ##################################### 189 190 module Machine 191 class 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 220 end 221 end 222 223 experiments/machine/test/eio_test.rb
r135 r141 13 13 def setup 14 14 #Reactor.instance.quiet 15 # Have a thread going, because it messes up Ruby's io.sysread function 16 Thread.new {sleep 1000} 15 17 end 16 18 … … 19 21 20 22 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 } 26 44 } 45 } 46 27 47 Reactor.instance.run 28 48
