74 lines
1.5 KiB
C++
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_
|