00001 #include <iostream> 00002 #include <iomanip> 00003 #include <socklibpp/socklistener.h> 00004 00005 #include <csignal> 00006 00007 using namespace std; 00008 using namespace socklibpp; 00009 00010 listener<> connections; 00011 00012 bool send_back(sock sb, int) 00013 { 00014 char buffer[256]; 00015 int r = sb.recv(buffer, sizeof buffer); 00016 if (r<1) { 00017 sb.close(); 00018 return true; // remove it from the listener 00019 } 00020 if (sb.send(buffer, r) < r) { 00021 sb.close(); 00022 return true; 00023 } 00024 return false; 00025 } 00026 00027 int main() 00028 { 00029 addr_in local(addr_in::addr_any, 0); 00030 local.port("echo"); 00031 00032 sock server; 00033 server.create(sock::pf_inet, sock::sock_stream); 00034 00035 if (!server.bind(local)) { 00036 cerr << "Could not bind: " << server.error << endl; 00037 return 1; 00038 } 00039 if (!server.listen()) { 00040 cerr << "Could not listen: " << server.error << endl; 00041 return 1; 00042 } 00043 00044 cout << "Running echo server on " << local << endl; 00045 00046 while (1) { 00047 long s = 10; 00048 long u = 0; 00049 if (server.wait_read(u, s)) { 00050 connections.add(server.accept()); 00051 } 00052 00053 connections.for_each_read(send_back); 00054 } 00055 }