summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-09 23:39:57 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-12-09 23:39:57 +0000
commitdc932e649260970cd849af21b4434123a0c6bae1 (patch)
tree86dd3b9367cb55aa4576f78467550bd1fbc9b028
parent07353b72ae9227584d945d58354794cefe39fb4b (diff)
downloadruby-dc932e649260970cd849af21b4434123a0c6bae1.tar.gz
ruby-dc932e649260970cd849af21b4434123a0c6bae1.tar.xz
ruby-dc932e649260970cd849af21b4434123a0c6bae1.zip
* ext/socket/socket.c (sock_listen): get OpenFile just before calling
listen(2). git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@7527 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ext/socket/socket.c4
-rw-r--r--test/socket/test_socket.rb14
3 files changed, 22 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 81f3ebfb3..e51f07a79 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Dec 10 08:39:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_listen): get OpenFile just before calling
+ listen(2).
+
Thu Dec 9 16:28:35 2004 NAKAMURA Usaku <usa@ruby-lang.org>
* ext/sdbm/init.c (GetDBM): typo.
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 83a70b203..ac2cac880 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -2013,10 +2013,12 @@ sock_listen(sock, log)
VALUE sock, log;
{
OpenFile *fptr;
+ int backlog;
rb_secure(4);
+ backlog = NUM2INT(log);
GetOpenFile(sock, fptr);
- if (listen(fptr->fd, NUM2INT(log)) < 0)
+ if (listen(fptr->fd, backlog) < 0)
rb_sys_fail("listen(2)");
return INT2FIX(0);
diff --git a/test/socket/test_socket.rb b/test/socket/test_socket.rb
index c436484dd..11d688ba7 100644
--- a/test/socket/test_socket.rb
+++ b/test/socket/test_socket.rb
@@ -57,4 +57,18 @@ class TestBasicSocket < Test::Unit::TestCase
}
end
end
+
+ def test_listen
+ s = nil
+ log = Object.new
+ class << log; self end.send(:define_method, :to_int) {
+ s.close
+ 2
+ }
+ inet_stream do |s|
+ assert_raise(IOError) {
+ s.listen(log)
+ }
+ end
+ end
end if defined?(Socket)