class EventMachine::EvmaUDPSocket
@private
Public Class Methods
create(host, port)
click to toggle source
# File lib/em/pure_ruby.rb, line 952 def create host, port sd = Socket.new( Socket::AF_INET, Socket::SOCK_DGRAM, 0 ) sd.bind Socket::pack_sockaddr_in( port, host ) EvmaUDPSocket.new sd end
Public Instance Methods
eventable_read()
click to toggle source
Proper nonblocking I/O was added to Ruby 1.8.4 in May 2006. If we have it, then we can read multiple times safely to improve performance.
# File lib/em/pure_ruby.rb, line 986 def eventable_read begin if io.respond_to?(:recvfrom_nonblock) 40.times { data,@return_address = io.recvfrom_nonblock(16384) EventMachine::event_callback uuid, ConnectionData, data @return_address = nil } else raise "unimplemented datagram-read operation on this Ruby" end rescue Errno::EAGAIN # no-op rescue Errno::ECONNRESET, EOFError @close_scheduled = true EventMachine::event_callback uuid, ConnectionUnbound, nil end end
eventable_write()
click to toggle source
eventable_write This really belongs in DatagramObject, but there is some UDP-specific stuff.
# File lib/em/pure_ruby.rb, line 961 def eventable_write 40.times { break if @outbound_q.empty? begin data,target = @outbound_q.first # This damn better be nonblocking. io.send data.to_s, 0, target @outbound_q.shift rescue Errno::EAGAIN # It's not been observed in testing that we ever get here. # True to the definition, packets will be accepted and quietly dropped # if the system is under pressure. break rescue EOFError, Errno::ECONNRESET @close_scheduled = true @outbound_q.clear end } end
send_data(data)
click to toggle source
# File lib/em/pure_ruby.rb, line 1007 def send_data data send_datagram data, @return_address end