class Kgio::UNIXServer

Kgio::UNIXServer should be used in place of the plain UNIXServer when #kgio_accept and #kgio_tryaccept methods are needed.

Public Instance Methods

server = Kgio::UNIXServer.new("/path/to/unix/socket") click to toggle source
kgio_accept → Kgio::Socket or nil
kgio_accept(klass = MySocket) → MySocket or nil
kgio_accept(nil, flags) → Kgio::Socket or nil

Initiates a blocking accept and returns a generic Kgio::Socket object with the kgio_addr attribute set (to the value of Kgio::LOCALHOST) on success.

On Ruby implementations using native threads, this can use a blocking accept(2) (or accept4(2)) system call to avoid thundering herds.

An optional klass argument may be specified to override the Kgio::Socket-class on a successful return value.

An optional flags argument may also be specified. flags is a bitmask that may contain any combination of:

  • Kgio::SOCK_CLOEXEC - close-on-exec flag (enabled by default)

  • Kgio::SOCK_NONBLOCK - non-blocking flag (unimportant)

static VALUE unix_accept(int argc, VALUE *argv, VALUE self)
{
        struct accept_args a;

        a.addr = NULL;
        a.addrlen = NULL;
        prepare_accept(&a, self, argc, argv);
        return my_accept(&a, 0);
}
server = Kgio::UNIXServer.new("/path/to/unix/socket") click to toggle source
kgio_tryaccept → Kgio::Socket or nil
kgio_tryaccept(klass = MySocket) → MySocket or nil
kgio_tryaccept(nil, flags) → Kgio::Socket or nil

Initiates a non-blocking accept and returns a generic Kgio::Socket object with the kgio_addr attribute set (to the value of Kgio::LOCALHOST) on success.

An optional klass argument may be specified to override the Kgio::Socket-class on a successful return value.

An optional flags argument may also be specified. flags is a bitmask that may contain any combination of:

  • Kgio::SOCK_CLOEXEC - close-on-exec flag (enabled by default)

  • Kgio::SOCK_NONBLOCK - non-blocking flag (unimportant)

static VALUE unix_tryaccept(int argc, VALUE *argv, VALUE self)
{
        struct accept_args a;

        a.addr = NULL;
        a.addrlen = NULL;
        prepare_accept(&a, self, argc, argv);
        return my_accept(&a, 1);
}