Class: IPSocket

Inherits:
BasicSocket show all
Defined in:
lib/rubysl/socket.rb

Direct Known Subclasses

TCPSocket, UDPSocket

Constant Summary

Constants inherited from BasicSocket

BasicSocket::FFI

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BasicSocket

#close_read, #close_write, do_not_reverse_lookup, #do_not_reverse_lookup, do_not_reverse_lookup=, #do_not_reverse_lookup=, for_fd, from_descriptor, #from_descriptor, #getpeername, #getsockname, #getsockopt, #recv, #recv_nonblock, #send, #setsockopt, #shutdown

Class Method Details

.getaddress(host) ⇒ Object



1231
1232
1233
# File 'lib/rubysl/socket.rb', line 1231

def self.getaddress(host)
  Socket::Foreign.getaddress host
end

Instance Method Details

#addr(reverse_lookup = nil) ⇒ Object



1235
1236
1237
1238
1239
1240
1241
1242
# File 'lib/rubysl/socket.rb', line 1235

def addr(reverse_lookup=nil)
  sockaddr = Socket::Foreign.getsockname descriptor

  reverse_lookup = !do_not_reverse_lookup if reverse_lookup.nil?

  family, port, host, ip = Socket::Foreign.getnameinfo sockaddr, Socket::Constants::NI_NUMERICHOST | Socket::Constants::NI_NUMERICSERV, reverse_lookup
  [family, port.to_i, host, ip]
end

#peeraddr(reverse_lookup = nil) ⇒ Object



1244
1245
1246
1247
1248
1249
1250
1251
# File 'lib/rubysl/socket.rb', line 1244

def peeraddr(reverse_lookup=nil)
  sockaddr = Socket::Foreign.getpeername descriptor

  reverse_lookup = !do_not_reverse_lookup if reverse_lookup.nil?

  family, port, host, ip = Socket::Foreign.getnameinfo sockaddr, Socket::Constants::NI_NUMERICHOST | Socket::Constants::NI_NUMERICSERV, reverse_lookup
  [family, port.to_i, host, ip]
end

#recvfrom(maxlen, flags = 0) ⇒ Object



1253
1254
1255
1256
1257
# File 'lib/rubysl/socket.rb', line 1253

def recvfrom(maxlen, flags = 0)
  # FIXME 1 is hardcoded knowledge from io.cpp
  flags = 0 if flags.nil?
  socket_recv maxlen, flags, 1
end

#recvfrom_nonblock(maxlen, flags = 0) ⇒ Object



1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
# File 'lib/rubysl/socket.rb', line 1259

def recvfrom_nonblock(maxlen, flags = 0)
  # Set socket to non-blocking, if we can
  # Todo: Ensure this works in Windows!  If not, I claim that's Fcntl's fault.
  fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
  flags = 0 if flags.nil?
  flags |= Socket::MSG_DONTWAIT

  # Wait until we have something to read
  # @todo  Why? ^^ --rue
  IO.select([self])
  return recvfrom(maxlen, flags)
end