Welcome to serf, a high-performance asynchronous HTTP client library.

The serf library is a C-based HTTP client library built upon the Apache
Portable Runtime (APR) library. It multiplexes connections, running the
read/write communication asynchronously. Memory copies and transformations are
kept to a minimum to provide high performance operation.

  * Status: http://code.google.com/p/serf/wiki/
  * Site: http://code.google.com/p/serf/
  * Code: http://serf.googlecode.com/svn/
  * Issues: http://code.google.com/p/serf/issues/list
  * Mail: serf-dev@googlegroups.com
  * People: Justin Erenkrantz, Greg Stein 

----

Quick guide for the impatient

  (Unix)
  % ./configure
  % make
  % make install

----

Building serf from a Subversion checkout (non-packaged releases)

We suggest that you try out 'serfmake'.

 % ./serfmake --prefix=/usr/local/serf --with-apr=/usr/local/apr install

If you want to use the autoconf build system and are using a Subversion
checkout, you need to run buildconf and have APR and APR-util sources handy.

 % ./buildconf --with-apr=/path/to/apr --with-apr-util=/path/to/apr-util
 (By default, buildconf will look in . and ../ for apr and apr-util.)

Then, you can use ./configure, make, etc.
