Class: Socket
- Inherits:
-
BasicSocket
- Object
- IO
- BasicSocket
- Socket
- Defined in:
- mrbgems/mruby-socket/mrblib/socket.rb
Instance Attribute Summary
Attributes inherited from BasicSocket
Class Method Summary collapse
-
.getaddrinfo(nodename, servname, family = nil, socktype = nil, protocol = nil, flags = 0) ⇒ Object
call-seq: Socket.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0) -> array.
-
.open(*args) ⇒ Object
call-seq: Socket.open(domain, type, protocol=0) -> socket.
-
.sockaddr_in(port, host) ⇒ Object
(also: pack_sockaddr_in)
call-seq: Socket.sockaddr_in(port, host) -> string.
-
.unpack_sockaddr_in(sa) ⇒ Object
call-seq: Socket.unpack_sockaddr_in(sockaddr) -> [port, ip_address].
-
.unpack_sockaddr_un(sa) ⇒ Object
call-seq: Socket.unpack_sockaddr_un(sockaddr) -> path.
Instance Method Summary collapse
- #accept ⇒ Object
- #accept_nonblock ⇒ Object
-
#bind(sockaddr) ⇒ Object
call-seq: socket.bind(sockaddr) -> 0.
-
#connect(sockaddr) ⇒ Object
call-seq: socket.connect(sockaddr) -> 0.
-
#connect_nonblock(sockaddr) ⇒ Object
call-seq: socket.connect_nonblock(sockaddr) -> 0.
-
#initialize(domain, type, protocol = 0) ⇒ Socket
constructor
call-seq: Socket.new(domain, type, protocol=0) -> socket.
-
#listen(backlog) ⇒ Object
def ipv6only!.
- #recvfrom(maxlen, flags = 0) ⇒ Object
- #recvfrom_nonblock(*args) ⇒ Object
- #sysaccept ⇒ Object
Methods inherited from BasicSocket
do_not_reverse_lookup, do_not_reverse_lookup=, for_fd, #local_address, #recv_nonblock, #remote_address
Methods inherited from IO
#each, #each_byte, #each_char, #hash, pipe, popen, #pos=, #printf, read, #rewind
Constructor Details
#initialize(domain, type, protocol = 0) ⇒ Socket
call-seq:
Socket.new(domain, type, protocol=0) -> socket
Creates a new socket with the given domain, type, and protocol.
sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
sock = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM)
754 755 756 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 754 def initialize(domain, type, protocol=0) super(Socket._socket(domain, type, protocol), "r+") end |
Class Method Details
.getaddrinfo(nodename, servname, family = nil, socktype = nil, protocol = nil, flags = 0) ⇒ Object
call-seq:
Socket.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0) -> array
Returns an array of Addrinfo objects for the given nodename and servname.
Addrinfo.getaddrinfo("localhost", "http")
Addrinfo.getaddrinfo("www.example.com", 80, Socket::AF_INET)
769 770 771 772 773 774 775 776 777 778 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 769 def self.getaddrinfo(nodename, servname, family=nil, socktype=nil, protocol=nil, flags=0) Addrinfo.getaddrinfo(nodename, servname, family, socktype, protocol, flags).map {|ai| ary = ai._to_array ary[2] = nodename ary[4] = ai.afamily ary[5] = ai.socktype ary[6] = ai.protocol ary } end |
.open(*args) ⇒ Object
call-seq:
Socket.open(domain, type, protocol=0) -> socket
Creates a new socket. Alias for Socket.new.
sock = Socket.open(Socket::AF_INET, Socket::SOCK_STREAM)
791 792 793 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 791 def self.open(*args) new(args) end |
.sockaddr_in(port, host) ⇒ Object Also known as: pack_sockaddr_in
call-seq:
Socket.sockaddr_in(port, host) -> string
Returns a packed sockaddr_in structure for the given port and host.
Socket.sockaddr_in(80, "127.0.0.1")
Socket.sockaddr_in(443, "localhost")
804 805 806 807 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 804 def self.sockaddr_in(port, host) ai = Addrinfo.getaddrinfo(host, port, nil, Socket::SOCK_DGRAM)[0] ai.to_sockaddr end |
.unpack_sockaddr_in(sa) ⇒ Object
call-seq:
Socket.unpack_sockaddr_in(sockaddr) -> [port, ip_address]
Unpacks a packed sockaddr_in structure and returns port and IP address.
port, addr = Socket.unpack_sockaddr_in(sockaddr)
828 829 830 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 828 def self.unpack_sockaddr_in(sa) Addrinfo.new(sa).ip_unpack.reverse end |
.unpack_sockaddr_un(sa) ⇒ Object
call-seq:
Socket.unpack_sockaddr_un(sockaddr) -> path
Unpacks a packed sockaddr_un structure and returns the Unix socket path.
path = Socket.unpack_sockaddr_un(sockaddr)
840 841 842 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 840 def self.unpack_sockaddr_un(sa) Addrinfo.new(sa).unix_path end |
Instance Method Details
#accept ⇒ Object
850 851 852 853 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 850 def accept fd, addr = self.sysaccept [ Socket.for_fd(fd), addr ] end |
#accept_nonblock ⇒ Object
855 856 857 858 859 860 861 862 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 855 def accept_nonblock begin self._setnonblock(true) self.accept ensure self._setnonblock(false) end end |
#bind(sockaddr) ⇒ Object
call-seq:
socket.bind(sockaddr) -> 0
Binds the socket to the given socket address.
sock.bind(Socket.sockaddr_in(8080, "127.0.0.1"))
sock.bind(addrinfo)
873 874 875 876 877 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 873 def bind(sockaddr) sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo Socket._bind(self.fileno, sockaddr) 0 end |
#connect(sockaddr) ⇒ Object
call-seq:
socket.connect(sockaddr) -> 0
Connects the socket to the given socket address.
sock.connect(Socket.sockaddr_in(80, "127.0.0.1"))
sock.connect(addrinfo)
888 889 890 891 892 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 888 def connect(sockaddr) sockaddr = sockaddr.to_sockaddr if sockaddr.is_a? Addrinfo Socket._connect(self.fileno, sockaddr) 0 end |
#connect_nonblock(sockaddr) ⇒ Object
call-seq:
socket.connect_nonblock(sockaddr) -> 0
Connects the socket to the given address without blocking. May raise an exception if the connection cannot be completed immediately.
sock.connect_nonblock(sockaddr)
903 904 905 906 907 908 909 910 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 903 def connect_nonblock(sockaddr) begin self._setnonblock(true) self.connect(sockaddr) ensure self._setnonblock(false) end end |
#listen(backlog) ⇒ Object
def ipv6only!
914 915 916 917 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 914 def listen(backlog) Socket._listen(self.fileno, backlog) 0 end |
#recvfrom(maxlen, flags = 0) ⇒ Object
919 920 921 922 923 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 919 def recvfrom(maxlen, flags=0) msg, sa = _recvfrom(maxlen, flags) socktype = self.getsockopt(Socket::SOL_SOCKET, Socket::SO_TYPE).int [ msg, Addrinfo.new(sa, Socket::PF_UNSPEC, socktype) ] end |
#recvfrom_nonblock(*args) ⇒ Object
925 926 927 928 929 930 931 932 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 925 def recvfrom_nonblock(*args) begin self._setnonblock(true) self._recvfrom(*args) ensure self._setnonblock(false) end end |
#sysaccept ⇒ Object
934 935 936 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 934 def sysaccept Socket._accept2(self.fileno) end |