1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/*
server.cc
*/
#include <iostream>
#include <bobcat/a2x>
#include <bobcat/serversocket>
#include <bobcat/errno>
#include <bobcat/ifdstream>
using namespace std;
using namespace FBB;
int main(int argc, char **argv, char **envp)
try
{
if (argc == 1)
{
cout << "port number required\n";
return 1;
}
size_t portnr = A2x(argv[1]);
ServerSocket server(portnr);
server.listen(); // plain blocking listen-mode
while (true)
{
SocketBase fdb = server.accept(); // wait for incoming
int fd = fdb.socket();
cerr << "Client FD = " << fd << ", " << endl <<
"address = " << fdb.dottedDecimalAddress() << ", " <<
endl <<
"communication through port " << fdb.port() << endl;
IFdStream in(fd); // stream to read from client
string cmd;
if (getline(in, cmd))
{
cout << "Got: " << cmd << endl;
if (cmd[0] == 'q') // terminate if client sends `q'
return 0;
close(fd); // the connection is terminated
}
}
}
catch(Errno const &error)
{
cerr << error.what() << endl;
return 1;
}
|