diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ext/socket/lib/socket.rb | 11 | ||||
-rw-r--r-- | test/socket/test_unix.rb | 11 |
3 files changed, 26 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Wed Feb 11 16:50:59 2009 Tanaka Akira <akr@fsij.org> + + * ext/socket/lib/socket.rb (Socket.unix_server_socket): call the block + if given. remove the socket file when the block exits. + Wed Feb 11 16:44:20 2009 Tanaka Akira <akr@fsij.org> * ext/socket/ancdata.c (ancillary_s_ip_pktinfo): make 3rd argument diff --git a/ext/socket/lib/socket.rb b/ext/socket/lib/socket.rb index 0981b12edc..1099b7fd2f 100644 --- a/ext/socket/lib/socket.rb +++ b/ext/socket/lib/socket.rb @@ -607,7 +607,16 @@ class Socket if st && st.socket? && st.owned? File.unlink path end - Addrinfo.unix(path).listen + s = Addrinfo.unix(path).listen + if block_given? + begin + yield s + ensure + File.unlink path + end + else + s + end end # creates a UNIX socket server on _path_. diff --git a/test/socket/test_unix.rb b/test/socket/test_unix.rb index d3b17450f1..2b1f4deb33 100644 --- a/test/socket/test_unix.rb +++ b/test/socket/test_unix.rb @@ -296,6 +296,17 @@ class TestSocket_UNIXSocket < Test::Unit::TestCase } end + def test_unix_server_socket + Dir.mktmpdir {|d| + path = "#{d}/sock" + Socket.unix_server_socket(path) {|s| + assert_equal(path, s.local_address.unix_path) + assert(File.socket?(path)) + } + assert_raise(Errno::ENOENT) { File.stat path } + } + end + def test_getcred_ucred return if /linux/ !~ RUBY_PLATFORM Dir.mktmpdir {|d| |