442: def initialize io
443: @uuid = UuidGenerator.generate
444: @io = io
445: @last_activity = Reactor.instance.current_loop_time
446:
447: if defined?(Fcntl::F_GETFL)
448: m = @io.fcntl(Fcntl::F_GETFL, 0)
449: @io.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK | m)
450: else
451:
452:
453: begin
454: s = Socket.for_fd(@io.fileno)
455: s.fcntl( Fcntl::F_SETFL, Fcntl::O_NONBLOCK )
456: rescue Errno::EINVAL, Errno::EBADF
457: STDERR.puts "Serious error: unable to set descriptor non-blocking"
458: end
459: end
460:
461:
462: @close_scheduled = false
463: @close_requested = false
464:
465: se = self; @io.instance_eval { @my_selectable = se }
466: Reactor.instance.add_selectable @io
467: end