From: Masatoshi SEKI Date: 2003-12-06T20:48:53+09:00 Subject: [ruby-dev:22171] Re: invalid parameter to fcntl in drb.rb 咳といいます。 >> 手元のNetBSDでも同じ現象が出ていたので、確認したところ、 >> F_SETFD + FD_CLOEXEC は問題ないですが、F_SETFL + O_NONBLOCK >> の方が問題でした。 >> つまり、前まではたまたま F_SETFL + FD_CLOEXEC になっていたお >> かげで、O_NONBLOCK が無効になっていたから動いていたわけです。 > > どうやらその通りで、F_SETFLの行をコメントアウトしても通るように > なりました。 > > SSLかつTCPServerの時がまずいようで、TCPServerの時だけにF_SETFLを > しないようにするのでも通りました。 > > def set_sockopt(soc) # :nodoc: > soc.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) > if not(soc.is_a?(TCPServer)) and defined?(Fcntl::O_NONBLOCK) > soc.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK) > end > soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? > Fcntl::FD_CLOEXEC > end > > > SSLでO_NONBLOCKにするとまずいというのは他のところでもおきている > ようなのですが、O_NONBLOCKにする必要はあるのでしょうか? > > # http://lists.community.tummy.com/pipermail/enbd/2001/000228.html > # http://mail.gnu.org/archive/html/monit-dev/2002-11/msg00069.html > # など なんでNOBLOCKにしていたか思い出せません。 SSLに限らずNONBLOCKしないようにしたら問題あるかなあ。 抜いてcommitしてしまおうかしら。