Public Types | |
enum | Error { WOS_TCPS_ERR_NO_ERR = 0, WOS_TCPS_ERR_OPEN_SOCKET, WOS_TCPS_ERR_BIND, WOS_TCPS_ERR_CREATE_THREAD, WOS_TCPS_ERR_NO_SERVER_SOCKET, WOS_TCPS_ERR_ACCEPT, WOS_TCPS_ERR_SET_NONBLOCKING, WOS_TCPS_ERR_ALREADY_BOUND, WOS_TCPS_ERR_SERVER_RUNNING, WOS_TCPS_ERR_LISTEN } |
Public Member Functions | |
WOscTcpServer (bool threading=true) | |
Error | Bind (int port, in_addr_t addr=INADDR_ANY) |
Error | Start () |
Error | Stop () |
virtual WOscTcpServerHandler::Error | SetupHandlerForNewConnection (WOscTcpServerHandler **handler, int socket, const TheNetReturnAddress &peer)=0 |
int | GetServerSocket () const |
Static Public Member Functions | |
static const char * | GetErrStr (Error err) |
Protected Member Functions | |
Error | Accept () |
void | Register (WOscTcpServerHandler *handler) |
bool | UnRegister (WOscTcpServerHandler *handler) |
Friends | |
class | WOscTcpServerHandler |
void * | wosc_tcp_server_thread (void *argument) |
Definition at line 49 of file WOscTcpServer.h.
virtual WOscTcpServerHandler::Error WOscTcpServer::SetupHandlerForNewConnection | ( | WOscTcpServerHandler ** | handler, | |
int | socket, | |||
const TheNetReturnAddress & | peer | |||
) | [pure virtual] |
This member is called from the server thread if a new client has connected to the server. The final server implementation must override this abstract member to launch its own connection handler. Please see the streaming server example how to do this. In short:
{ WOscTcpServerHandler* h = new WOscStreamingHandler(this); WOscTcpServerHandler::Error err = h->Start(socket, peer); if (err != WOscTcpServerHandler::WOS_ERR_NO_ERROR ) { delete h; } else { *handler = h; } return err; }
void* wosc_tcp_server_thread | ( | void * | argument | ) | [friend] |
Bootstrapper for receive thread member function.
Definition at line 42 of file WOscTcpServer.cpp.
00043 { 00044 WOSC_DBG_PRT("Server thread entered."); 00045 WOscTcpServer* server = static_cast<WOscTcpServer*>(argument); 00046 server->Accept(); 00047 WOSC_DBG_PRT("Server thread terminated."); 00048 pthread_exit(NULL); 00049 }