1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

socket: disable nonblocking-by-default on win32

Perhaps this fixes test failures reported by Greg and k0kubun.

However, the failure of certain tests to handle non-blocking I/O
seems to indicate pre-existing problems on win32 platforms.
Somebody knowledgeable about win32 should be able to fix it.

[ruby-core:89973] [ruby-core:89976] [ruby-core:89977] [Bug #14968]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2018-11-22 20:02:36 +00:00
parent 2751b5366d
commit 0698c4969c
3 changed files with 23 additions and 7 deletions

View file

@ -466,7 +466,9 @@ rsock_socket0(int domain, int type, int proto)
return -1;
fix_cloexec:
rb_maygvl_fd_fix_cloexec(ret);
rsock_make_fd_nonblock(ret);
if (RSOCK_NONBLOCK_DEFAULT) {
rsock_make_fd_nonblock(ret);
}
update_max_fd:
rb_update_max_fd(ret);
@ -481,7 +483,9 @@ rsock_socket0(int domain, int type, int proto)
if (ret == -1)
return -1;
rb_fd_fix_cloexec(ret);
rsock_make_fd_nonblock(ret);
if (RSOCK_NONBLOCK_DEFAULT) {
rsock_make_fd_nonblock(ret);
}
return ret;
}
@ -661,7 +665,9 @@ cloexec_accept(int socket, struct sockaddr *address, socklen_t *address_len,
#ifdef HAVE_ACCEPT4
static int try_accept4 = 1;
#endif
nonblock = 1; /* TODO remove parameter */
if (RSOCK_NONBLOCK_DEFAULT) {
nonblock = 1;
}
if (address_len) len0 = *address_len;
#ifdef HAVE_ACCEPT4
if (try_accept4) {

View file

@ -26,7 +26,13 @@
# if defined(_MSC_VER)
# undef HAVE_TYPE_STRUCT_SOCKADDR_DL
# endif
/*
* FIXME: failures if we make nonblocking the default
* [ruby-core:89973] [ruby-core:89976] [ruby-core:89977] [Bug #14968]
*/
# define RSOCK_NONBLOCK_DEFAULT (0)
#else
# define RSOCK_NONBLOCK_DEFAULT (1)
# include <sys/socket.h>
# include <netinet/in.h>
# ifdef HAVE_NETINET_IN_SYSTM_H

View file

@ -213,8 +213,10 @@ rsock_socketpair0(int domain, int type, int protocol, int sv[2])
fix_cloexec:
rb_maygvl_fd_fix_cloexec(sv[0]);
rb_maygvl_fd_fix_cloexec(sv[1]);
rsock_make_fd_nonblock(sv[0]);
rsock_make_fd_nonblock(sv[1]);
if (RSOCK_NONBLOCK_DEFAULT) {
rsock_make_fd_nonblock(sv[0]);
rsock_make_fd_nonblock(sv[1]);
}
update_max_fd:
rb_update_max_fd(sv[0]);
@ -233,8 +235,10 @@ rsock_socketpair0(int domain, int type, int protocol, int sv[2])
rb_fd_fix_cloexec(sv[0]);
rb_fd_fix_cloexec(sv[1]);
rsock_make_fd_nonblock(sv[0]);
rsock_make_fd_nonblock(sv[1]);
if (RSOCK_NONBLOCK_DEFAULT) {
rsock_make_fd_nonblock(sv[0]);
rsock_make_fd_nonblock(sv[1]);
}
return ret;
}
#endif /* !SOCK_CLOEXEC */