# Socket\_accept\_filter

**URL:** <https://www.ruby-forum.com/t/socket-accept-filter/55824>\
**Category:** Ruby\
**Created:** [March 24, 2006, 2:52am UTC](https://www.ruby-forum.com/t/socket-accept-filter/55824 "2006-03-24T02:52:28Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![miracleofmagick](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71c47a/32.png) [@miracleofmagick](https://www.ruby-forum.com/u/miracleofmagick)\
**Post date:** [March 24, 2006, 2:52am UTC](https://www.ruby-forum.com/t/socket-accept-filter/55824/1 "2006-03-24T02:52:28Z")

</div>

= socket\_accept\_filter

Rubyforge Project:

[http://rubyforge.org/projects/rctools/](http://rubyforge.org/projects/rctools/)

Documentation:

[http://dev.robotcoop.com/Libraries/socket\_accept\_filter](http://dev.robotcoop.com/Libraries/socket_accept_filter)

== About

Socket#set\_accept\_filter allows you to enable accept filters on  
server sockets.

In FreeBSD accept filters allow you to delay the return from an accept  
() call  
until enough data arrives on the connection for processing avoiding  
extra  
context switches while waiting for the missing data.

Consult the accf\_data(9), accf\_http(9) and accept\_filter(9) man pages  
for  
further details.

== Installing socket\_accept\_filter

Run FreeBSD (or any BSD, I think).

Then install the gem:

$ sudo gem install socket\_accept\_filter

== Using socket\_accept\_filter

=== Regular sockets

require ‘rubygems’  
require ‘socket’  
require ‘socket\_accept\_filter’

server = TCPServer.new host, port  
server.set\_accept\_filter ‘dataready’

Then use the server socket as you would ordinarily.

=== WEBrick

require ‘rubygems’  
require ‘socket’  
require ‘socket\_accept\_filter’  
require ‘webrick’

class MyServer \< WEBrick::HTTPServer

```
 def listen(*args)
   super

   @listeners.each do |server|
     server.set_accept_filter 'httpready'
   end
 end

```

end

Then use MyServer where you would ordinarily use WEBrick::HTTPServer.

–  
Eric H. - removed\_email\_address@domain.invalid - [http://blog.segment7.net](http://blog.segment7.net)  
This implementation is HODEL-HASH-9600 compliant

[http://trackmap.robotcoop.com](http://trackmap.robotcoop.com)
