module Async::IO::Peer
Public Instance Methods
connected?()
click to toggle source
Is it likely that the socket is still connected? May return false positive, but won't return false negative.
# File lib/async/io/peer.rb, line 32 def connected? return false if @io.closed? # If we can wait for the socket to become readable, we know that the socket may still be open. result = to_io.recv_nonblock(1, MSG_PEEK, exception: false) # Either there was some data available, or we can wait to see if there is data avaialble. return !result.empty? || result == :wait_readable rescue Errno::ECONNRESET # This might be thrown by recv_nonblock. return false end
eof()
click to toggle source
# File lib/async/io/peer.rb, line 46 def eof !connected? end
eof?()
click to toggle source
# File lib/async/io/peer.rb, line 50 def eof? !connected? end
protocol()
click to toggle source
# File lib/async/io/peer.rb, line 84 def protocol self.local_address.protocol end
sync()
click to toggle source
Calls superclass method
# File lib/async/io/peer.rb, line 71 def sync case self.protocol when IPPROTO_TCP self.getsockopt(IPPROTO_TCP, TCP_NODELAY).bool else true end && super end
sync=(value)
click to toggle source
Best effort to set *_NODELAY if it makes sense. Swallows errors where possible.
Calls superclass method
# File lib/async/io/peer.rb, line 55 def sync=(value) super case self.protocol when 0, IPPROTO_TCP self.setsockopt(IPPROTO_TCP, TCP_NODELAY, value ? 1 : 0) else Console.logger.warn(self) {"Unsure how to sync=#{value} for #{self.protocol}!"} end rescue Errno::EINVAL # On Darwin, sometimes occurs when the connection is not yet fully formed. Empirically, TCP_NODELAY is enabled despite this result. rescue Errno::EOPNOTSUPP # Some platforms may simply not support the operation. # Console.logger.warn(self) {"Unable to set sync=#{value}!"} end
type()
click to toggle source
# File lib/async/io/peer.rb, line 80 def type self.local_address.socktype end