From: Kazuhiro NISHIYAMA Date: 2003-12-06T17:46:49+09:00 Subject: [ruby-dev:22170] Re: invalid parameter to fcntl in drb.rb 西山和広です。 In <20031205190136.B2B6.USA@osb.att.ne.jp> On Fri, 5 Dec 2003 19:04:08 +0900 "U.Nakamura" wrote: > 手元の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 # など -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)