Class: Kgio::TCPServer
- Inherits:
-
TCPServer
- Object
- TCPServer
- Kgio::TCPServer
- Defined in:
- ext/kgio/accept.c,
ext/kgio/accept.c
Overview
Kgio::TCPServer should be used in place of the plain TCPServer when kgio_accept and kgio_tryaccept methods are needed.
Instance Method Summary collapse
-
#kgio_accept(*args) ⇒ Object
server = Kgio::TCPServer.new(‘0.0.0.0’, 80) server.kgio_accept -> Kgio::Socket or nil server.kgio_tryaccept -> Kgio::Socket or nil server.kgio_tryaccept(klass = MySocket) -> MySocket or nil.
-
#kgio_tryaccept(*args) ⇒ Object
server = Kgio::TCPServer.new(‘0.0.0.0’, 80) server.kgio_tryaccept -> Kgio::Socket or nil server.kgio_tryaccept(klass = MySocket) -> MySocket or nil server.kgio_tryaccept(nil, flags) -> Kgio::Socket or nil.
Instance Method Details
#kgio_accept(*args) ⇒ Object
server = Kgio::TCPServer.new(‘0.0.0.0’, 80) server.kgio_accept -> Kgio::Socket or nil server.kgio_tryaccept -> Kgio::Socket or nil server.kgio_tryaccept(klass = MySocket) -> MySocket or nil
Initiates a blocking accept and returns a generic Kgio::Socket object with the kgio_addr attribute set to the IP address of the client 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)
303 304 305 306 307 308 309 310 311 312 313 |
# File 'ext/kgio/accept.c', line 303
static VALUE tcp_accept(int argc, VALUE *argv, VALUE self)
{
struct sockaddr_storage addr;
socklen_t addrlen = sizeof(struct sockaddr_storage);
struct accept_args a;
a.addr = (struct sockaddr *)&addr;
a.addrlen = &addrlen;
prepare_accept(&a, self, argc, argv);
return my_accept(&a, 0);
}
|
#kgio_tryaccept(*args) ⇒ Object
server = Kgio::TCPServer.new(‘0.0.0.0’, 80) server.kgio_tryaccept -> Kgio::Socket or nil server.kgio_tryaccept(klass = MySocket) -> MySocket or nil server.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 IP address of the connected client on success.
Returns nil on EAGAIN, and raises on other errors.
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)
267 268 269 270 271 272 273 274 275 276 277 |
# File 'ext/kgio/accept.c', line 267
static VALUE tcp_tryaccept(int argc, VALUE *argv, VALUE self)
{
struct sockaddr_storage addr;
socklen_t addrlen = sizeof(struct sockaddr_storage);
struct accept_args a;
a.addr = (struct sockaddr *)&addr;
a.addrlen = &addrlen;
prepare_accept(&a, self, argc, argv);
return my_accept(&a, 1);
}
|