Class: UDPSocket
Instance Method Summary
collapse
Methods inherited from IPSocket
#addr, getaddress, #peeraddr, #recvfrom
Methods inherited from BasicSocket
#close_read, #close_write, #connect_address, do_not_reverse_lookup, #do_not_reverse_lookup, do_not_reverse_lookup=, #do_not_reverse_lookup=, for_fd, #getpeereid, #getpeername, #getsockname, #getsockopt, #recv, #recv_nonblock, #recvmsg, #recvmsg_nonblock, #sendmsg, #sendmsg_nonblock, #setsockopt, #shutdown
Constructor Details
#initialize(family = Socket::AF_INET) ⇒ UDPSocket
Returns a new instance of UDPSocket.
2
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/socket/udp_socket.rb', line 2
def initialize(family = Socket::AF_INET)
@no_reverse_lookup = self.class.do_not_reverse_lookup
@family = RubySL::Socket.address_family(family)
descriptor = RubySL::Socket::Foreign
.socket(@family, Socket::SOCK_DGRAM, Socket::IPPROTO_UDP)
Errno.handle('socket(2)') if descriptor < 0
IO.setup(self, descriptor, nil, true)
binmode
end
|
Instance Method Details
#bind(host, port) ⇒ Object
15
16
17
18
19
20
21
22
|
# File 'lib/socket/udp_socket.rb', line 15
def bind(host, port)
addr = Socket.sockaddr_in(port.to_i, host)
status = RubySL::Socket::Foreign.bind(descriptor, addr)
Errno.handle('bind(2)') if status < 0
0
end
|
#connect(host, port) ⇒ Object
#inspect ⇒ Object
57
58
59
|
# File 'lib/socket/udp_socket.rb', line 57
def inspect
"#<#{self.class}:fd #{fileno}>"
end
|
#local_address ⇒ Object
61
62
63
64
65
66
|
# File 'lib/socket/udp_socket.rb', line 61
def local_address
address = addr
sockaddr = Socket.pack_sockaddr_in(address[1], address[3])
Addrinfo.new(sockaddr, address[0], :DGRAM)
end
|
#recvfrom_nonblock(maxlen, flags = 0) ⇒ Object
47
48
49
50
51
52
53
54
55
|
# File 'lib/socket/udp_socket.rb', line 47
def recvfrom_nonblock(maxlen, flags = 0)
fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
flags = 0 if flags.nil?
flags |= Socket::MSG_DONTWAIT
recvfrom(maxlen, flags)
end
|
#remote_address ⇒ Object
68
69
70
71
72
73
|
# File 'lib/socket/udp_socket.rb', line 68
def remote_address
address = peeraddr
sockaddr = Socket.pack_sockaddr_in(address[1], address[3])
Addrinfo.new(sockaddr, address[0], :DGRAM)
end
|
#send(message, flags, host = nil, port = nil) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/socket/udp_socket.rb', line 35
def send(message, flags, host = nil, port = nil)
if host and port
addr = Socket.sockaddr_in(port.to_i, host)
elsif host
addr = host
else
addr = nil
end
super(message, flags, addr)
end
|