Class: UNIXServer

Inherits:
UNIXSocket show all
Defined in:
mrbgems/mruby-socket/mrblib/socket.rb

Instance Attribute Summary

Attributes inherited from BasicSocket

#do_not_reverse_lookup

Instance Method Summary collapse

Methods inherited from UNIXSocket

#addr, #path, #peeraddr, #recvfrom, socketpair

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, open, pipe, popen, #pos=, #printf, read, #rewind

Constructor Details

#initialize(path) ⇒ UNIXServer

call-seq:

UNIXServer.new(path) -> unixserver

Creates a new Unix domain server socket bound to the given path.

server = UNIXServer.new("/tmp/server_socket")


1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 1045

def initialize(path)
  fd = Socket._socket(Socket::AF_UNIX, Socket::SOCK_STREAM, 0)
  begin
    super(fd)
    Socket._bind(fd, Socket.pack_sockaddr_un(path))
    self.listen(5)
  rescue => e
    IO._sysclose(fd) rescue nil
    raise e
  end

  if block_given?
    begin
      yield self
    ensure
      self.close rescue nil unless self.closed?
    end
  end
end

Instance Method Details

#acceptObject

call-seq:

unixserver.accept -> unixsocket

Accepts an incoming connection and returns a new UNIXSocket.

server = UNIXServer.new("/tmp/server")
client = server.accept


1074
1075
1076
1077
1078
1079
1080
1081
1082
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 1074

def accept
  fd = self.sysaccept
  begin
    sock = UNIXSocket.for_fd(fd)
  rescue
    IO._sysclose(fd) rescue nil
  end
  sock
end

#accept_nonblockObject

call-seq:

unixserver.accept_nonblock -> unixsocket

Accepts an incoming connection without blocking. May raise an exception if no connection is available.

client = server.accept_nonblock


1093
1094
1095
1096
1097
1098
1099
1100
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 1093

def accept_nonblock
  begin
    self._setnonblock(true)
    self.accept
  ensure
    self._setnonblock(false)
  end
end

#listen(backlog) ⇒ Object

call-seq:

unixserver.listen(backlog) -> 0

Sets the socket to listen for incoming connections with the given backlog.

server.listen(5)
server.listen(128)


1111
1112
1113
1114
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 1111

def listen(backlog)
  Socket._listen(self.fileno, backlog)
  0
end

#sysacceptObject

call-seq:

unixserver.sysaccept -> integer

Accepts an incoming connection and returns the file descriptor.

fd = server.sysaccept


1124
1125
1126
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 1124

def sysaccept
  Socket._accept(self.fileno)
end