aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/socket/ipsocket.c9
-rw-r--r--ext/socket/unixsocket.c7
3 files changed, 19 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 9b1c0f4a14..936dec206c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Apr 9 23:51:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal),
+ ext/socket/unixsocket.c (rsock_init_unixsock): check the result of
+ listen(2). based on a patch from Mike Pomraning. [ruby-core:23698]
+
Fri Apr 9 21:22:10 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
* lib/irb/completion.rb (CompletionProc): irb will be stuck with
diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c
index 447ae40db6..b6b2426e97 100644
--- a/ext/socket/ipsocket.c
+++ b/ext/socket/ipsocket.c
@@ -104,8 +104,13 @@ init_inetsock_internal(struct inetsock_arg *arg)
arg->fd = -1;
- if (type == INET_SERVER)
- listen(fd, 5);
+ if (type == INET_SERVER) {
+ status = listen(fd, 5);
+ if (status < 0) {
+ close(fd);
+ syscall = "listen(2)";
+ }
+ }
/* create new instance */
return rsock_init_sock(arg->sock, fd);
diff --git a/ext/socket/unixsocket.c b/ext/socket/unixsocket.c
index 907f89cc49..4c3c5a7f7a 100644
--- a/ext/socket/unixsocket.c
+++ b/ext/socket/unixsocket.c
@@ -65,7 +65,12 @@ rsock_init_unixsock(VALUE sock, VALUE path, int server)
rb_sys_fail(sockaddr.sun_path);
}
- if (server) listen(fd, 5);
+ if (server) {
+ if (listen(fd, 5) < 0) {
+ close(fd);
+ rb_sys_fail("listen(2)");
+ }
+ }
rsock_init_sock(sock, fd);
if (server) {