Changeset 244
- Timestamp:
- 12/09/07 12:13:03 (9 months ago)
- Files:
-
- trunk/framework/core.rb (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/framework/core.rb
r243 r244 68 68 begin 69 69 client_socket,client_sockaddr = sock_io.accept_nonblock 70 client_sockaddr.setsockopt(*$tcp_cork_opts) rescue nil 70 71 rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR 71 72 puts "not ready yet" … … 107 108 rescue DisconnectError 108 109 return false 110 end 111 end 112 113 def configure_socket_options 114 case RUBY_PLATFORM 115 when /linux/ 116 # 9 is currently TCP_DEFER_ACCEPT 117 $tcp_defer_accept_opts = [Socket::SOL_TCP, 9, 1] 118 $tcp_cork_opts = [Socket::SOL_TCP, 3, 1] 119 when /freebsd(([1-4]\..{1,2})|5\.[0-4])/ 120 # Do nothing, just closing a bug when freebsd <= 5.4 121 when /freebsd/ 122 # Use the HTTP accept filter if available. 123 # The struct made by pack() is defined in /usr/include/sys/socket.h as accept_filter_arg 124 unless `/sbin/sysctl -nq net.inet.accf.http`.empty? 125 $tcp_defer_accept_opts = [Socket::SOL_SOCKET, Socket::SO_ACCEPTFILTER, ['httpready', nil].pack('a16a240')] 126 end 109 127 end 110 128 end … … 118 136 # t_socket.listen(50) 119 137 # t_socket.setsockopt(Socket::IPPROTO_TCP,Socket::TCP_NODELAY,1) 138 configure_socket_options 120 139 t_socket = TCPServer.new(ip,port.to_i) 121 t_socket.setsockopt(Socket::IPPROTO_TCP,Socket::TCP_NODELAY,1) 140 t_socket.setsockopt(*$tcp_defer_accept_opts) rescue nil 141 #t_socket.setsockopt(Socket::IPPROTO_TCP,Socket::TCP_NODELAY,1) 122 142 listen_sockets[t_socket.fileno] = { :socket => t_socket,:block => block,:module => t_module } 123 143 @read_ios << t_socket
