Changeset 244

Show
Ignore:
Timestamp:
12/09/07 12:13:03 (9 months ago)
Author:
gethema..@gmail.com
Message:

check in code that makes use of tcp server

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/framework/core.rb

    r243 r244  
    6868        begin 
    6969          client_socket,client_sockaddr = sock_io.accept_nonblock 
     70          client_sockaddr.setsockopt(*$tcp_cork_opts) rescue nil 
    7071        rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR 
    7172          puts "not ready yet" 
     
    107108        rescue DisconnectError 
    108109          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 
    109127        end 
    110128      end 
     
    118136#         t_socket.listen(50) 
    119137        #         t_socket.setsockopt(Socket::IPPROTO_TCP,Socket::TCP_NODELAY,1) 
     138        configure_socket_options 
    120139        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) 
    122142        listen_sockets[t_socket.fileno] = { :socket => t_socket,:block => block,:module => t_module } 
    123143        @read_ios << t_socket