src.dualinventive.com/dinet/sec-multi-proxy/include/server/TcpServer.h

74 lines
1.5 KiB
C++

/*
* Socket.h
*
* Created on: Apr 24, 2015
* Author: rheijden
*/
#ifndef INCLUDE_SERVER_TCPSERVER_H_
#define INCLUDE_SERVER_TCPSERVER_H_
#include <unistd.h>
#include <memory>
#include <iostream>
#include <string.h>
#include <netinet/in.h>
using namespace std;
class TCPConnection;
class TCPConnectionDirector;
/**
* TcpServer is the TCP server it listens for connections and creates a file descriptor per client.
*/
class TcpServer {
public:
const int kAcceptTimeoutMs = 500;
const int kListenBacklog = 512;
/**
* constructor for tcp server
* @param port port number
* @param dir pointer to conection director
* @throw int socket creation failed, socket reuseaddr failed, socket bind failed
*/
TcpServer(uint16_t port, std::shared_ptr<TCPConnectionDirector> dir);
/**
* deconstucor for tcp server
*/
~TcpServer();
/**
* sets socketaddres to be able to be reused
* @param reuseToggle true is reuse false is dont reuse
* @throw int socket resuseaddr failed
*/
void setReuseAddr(const bool reuseToggle);
/**
* sets socket to be blocking
* @param blockingToggle true is block false is dont block
*/
bool setBlocking(const bool blockingToggle);
/**
* bind the socket
* @throw int socket bind failed
*/
void bind(void);
/**
* accepting new connections
*/
void accept(void);
private:
std::shared_ptr<TCPConnectionDirector> __director; /** TCP ConnectionDirector handle */
uint16_t __port; /**< Listening port number */
int __fd; /**< Socket file descriptor */
};
#endif // INCLUDE_SERVER_TCPSERVER_H_