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

socket: split out SOCK_CLOEXEC versions of wrappers for readability

* ext/socket/init.c (rsock_socket0): split out SOCK_CLOEXEC version
	* ext/socket/socket.c (rsock_socketpair0): ditto
	  [ruby-core:60377]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44776 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2014-01-31 08:06:19 +00:00
parent d0a84c2ce9
commit cb07275001
3 changed files with 35 additions and 19 deletions

View file

@ -1,3 +1,9 @@
Fri Jan 31 17:01:47 2014 Eric Wong <e@80x24.org>
* ext/socket/init.c (rsock_socket0): split out SOCK_CLOEXEC version
* ext/socket/socket.c (rsock_socketpair0): ditto
[ruby-core:60377]
Fri Jan 31 03:48:40 2014 Eric Wong <e@80x24.org>
* benchmark/driver: avoid large alloc in driver process

View file

@ -264,12 +264,11 @@ int rsock_detect_cloexec(int fd)
return 0;
}
#ifdef SOCK_CLOEXEC
static int
rsock_socket0(int domain, int type, int proto)
{
int ret;
#ifdef SOCK_CLOEXEC
static int cloexec_state = -1; /* <0: unknown, 0: ignored, >0: working */
if (cloexec_state > 0) { /* common path, if SOCK_CLOEXEC is defined */
@ -300,22 +299,28 @@ rsock_socket0(int domain, int type, int proto)
else { /* cloexec_state == 0 */
ret = socket(domain, type, proto);
}
#else
ret = socket(domain, type, proto);
#endif
if (ret == -1)
return -1;
#ifdef SOCK_CLOEXEC
fix_cloexec:
#endif
rb_maygvl_fd_fix_cloexec(ret);
#ifdef SOCK_CLOEXEC
update_max_fd:
#endif
rb_update_max_fd(ret);
return ret;
}
#else /* !SOCK_CLOEXEC */
static int
rsock_socket0(int domain, int type, int proto)
{
int ret = socket(domain, type, proto);
if (ret == -1)
return -1;
rb_fd_fix_cloexec(ret);
return ret;
}
#endif /* !SOCK_CLOEXEC */
int
rsock_socket(int domain, int type, int proto)

View file

@ -168,12 +168,11 @@ pair_yield(VALUE pair)
#if defined HAVE_SOCKETPAIR
#ifdef SOCK_CLOEXEC
static int
rsock_socketpair0(int domain, int type, int protocol, int sv[2])
{
int ret;
#ifdef SOCK_CLOEXEC
static int cloexec_state = -1; /* <0: unknown, 0: ignored, >0: working */
if (cloexec_state > 0) { /* common path, if SOCK_CLOEXEC is defined */
@ -206,28 +205,34 @@ rsock_socketpair0(int domain, int type, int protocol, int sv[2])
else { /* cloexec_state == 0 */
ret = socketpair(domain, type, protocol, sv);
}
#else
ret = socketpair(domain, type, protocol, sv);
#endif
if (ret == -1) {
return -1;
}
#ifdef SOCK_CLOEXEC
fix_cloexec:
#endif
rb_maygvl_fd_fix_cloexec(sv[0]);
rb_maygvl_fd_fix_cloexec(sv[1]);
#ifdef SOCK_CLOEXEC
update_max_fd:
#endif
rb_update_max_fd(sv[0]);
rb_update_max_fd(sv[1]);
return ret;
}
#else /* !SOCK_CLOEXEC */
static int
rsock_socketpair0(int domain, int type, int protocol, int sv[2])
{
int ret = socketpair(domain, type, protocol, sv);
if (ret == -1)
return -1;
rb_fd_fix_cloexec(sv[0]);
rb_fd_fix_cloexec(sv[1]);
return ret;
}
#endif /* !SOCK_CLOEXEC */
static int
rsock_socketpair(int domain, int type, int protocol, int sv[2])