ext/kgio/accept.c in kgio-2.8.0 vs ext/kgio/accept.c in kgio-2.8.0.2.g30c1
- old
+ new
@@ -66,11 +66,11 @@
{
struct accept_args *a = ptr;
int rv;
rv = accept_fn(a->fd, a->addr, a->addrlen, a->flags);
- if (rv == -1 && errno == ENOSYS && accept_fn != my_accept4) {
+ if (rv < 0 && errno == ENOSYS && accept_fn != my_accept4) {
accept_fn = my_accept4;
rv = accept_fn(a->fd, a->addr, a->addrlen, a->flags);
}
return (VALUE)rv;
@@ -141,11 +141,13 @@
break;
case AF_INET6:
host_len = (long)INET6_ADDRSTRLEN;
break;
default:
- rb_raise(rb_eRuntimeError, "unsupported address family");
+ rb_raise(rb_eRuntimeError,
+ "unsupported address family: ss_family=%lu (socklen=%ld)",
+ (unsigned long)addr->ss_family, (long)len);
}
host = rb_str_new(NULL, host_len);
host_ptr = RSTRING_PTR(host);
rc = getnameinfo((struct sockaddr *)addr, len,
host_ptr, host_len, NULL, 0, NI_NUMERICHOST);
@@ -168,10 +170,10 @@
VALUE client_io;
int retried = 0;
retry:
client_fd = thread_accept(a, force_nonblock);
- if (client_fd == -1) {
+ if (client_fd < 0) {
switch (errno) {
case EAGAIN:
if (force_nonblock)
return Qnil;
a->fd = my_fileno(a->accept_io);