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:
parent
2751b5366d
commit
0698c4969c
3 changed files with 23 additions and 7 deletions
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue