epoll*: favor shutdown(2) for keepalive timeout
authorEric Wong <normalperson@yhbt.net>
Mon, 18 Jun 2012 20:32:39 +0000 (18 20:32 +0000)
committerEric Wong <normalperson@yhbt.net>
Mon, 18 Jun 2012 20:32:39 +0000 (18 20:32 +0000)
Triggering Errno::EBADF is tricky in multithreaded situations
due to possible race conditions and yet-to-be discovered bugs.
shutdown(2) is also safe against apps the fork() internally but
do not execve(2) nor set FD_CLOEXEC.

n.b. calling fork() after pthreads are spawned may not be safe
on all platforms w.r.t. malloc, but /is/ the case for glibc on
GNU/Linux.

lib/rainbows/epoll/client.rb

index 891e959..f690d85 100644 (file)
@@ -181,7 +181,7 @@ module Rainbows::Epoll::Client
   end
 
   def timeout!
-    close
+    shutdown
     true
   end