here is a breakdown of the example source file, example.cc.
example.cc follows the general use pattern explained on the main page.
we'll skip the cvs and licensing info, as well as the includes. the complete file can be viewed under "examples" on the navigation above.
namespace /*anonymous*/{ #ifdef TRADITIONAL typedef fpoller::traditional_poller example_poller; #else typedef fpoller::poller example_poller; #endif example_poller *the_poller = NULL; }
typedef fpoller::write_callback<const char, fpoller::writer::close_on_exit> example_writer;
struct example_parser{ example_parser(){} void parse (int fd, svec &incoming, int request_size){ the_poller->add(fd,fpoller::WRITE,new example_writer(pcc(incoming),request_size)); } };
typedef fpoller::read_callback<example_parser, fpoller::reader::socket_read, fpoller::reader::purge,fpoller::reader::stderr_report,fpoller::reader::termination_string> example_reader;
int main(){ signal(SIGPIPE,SIG_IGN);
fpoller::reader::termination_string::set_terminator("\n"); int fd; try { the_poller = new example_poller; fd = fpoller::get_listen_socket(8081); fpoller::set_non_blocking(fd); }catch (fpoller::exception &e){ std::cerr <<"fatal error. "<<e.where()<<"\n\t"<<e.what()<<"\n"; exit(1);
} the_poller->add(fd,fpoller::READ,new fpoller::accept_callback<example_reader,example_poller>(the_poller));
int nready; for (;;){ if ((nready = the_poller->poll(1000)) >= 0){ std::cerr <<"poll finished "<<nready<<" ready \n"; }else{ std::cerr <<"errno == "<<errno<<" error from poll(): "<< strerror(errno) <<"\n"; } }//for
delete the_poller; return 0; }