diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext/socket/socket.c | 4 | ||||
-rw-r--r-- | test/socket/test_socket.rb | 14 |
3 files changed, 22 insertions, 1 deletions
@@ -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 83a70b203d..ac2cac8809 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 c436484dde..11d688ba75 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) |