/* * Copyright (C) 2007-2023 Xagasoft, All rights reserved. * * This file is part of the libbu++ library and is released under the * terms of the license contained in the file LICENSE. */ #ifndef BU_SERVER_SOCKET_TCP_H #define BU_SERVER_SOCKET_TCP_H #include #include "bu/string.h" #include "bu/exceptionbase.h" #include "bu/serversocket.h" #ifdef WIN32 #include #else #include #endif namespace Bu { subExceptionDecl( ServerSocketTcpException ); /** * A single tcp/ip server socket. When created the server socket will bind * to the specified interface and port, and immediately begin listening for * connections. When connections come in they are pooled by the networking * drivers in the kernel until they are accepted, this means that failure * to keep space in the connection pool will result in connection refusals. * * Although the accept function returns an integral file descriptor, it is * designed to be used with the Socket class. * *@ingroup Serving */ class ServerSocketTcp : public ServerSocket { public: #ifdef WIN32 typedef unsigned int socket_t; #else typedef int socket_t; #endif ServerSocketTcp( int iPort, int nPoolSize=40 ); ServerSocketTcp( const String &sAddr, int iPort, int nPoolSize=40 ); ServerSocketTcp( socket_t nSocket, bool bInit, int nPoolSize=40 ); ServerSocketTcp( const ServerSocketTcp &rSrc ); virtual ~ServerSocketTcp(); virtual Bu::Socket *accept( int nTimeoutSec=0, int nTimeoutUSec=0 ); virtual bool getFd( int &rFdOut ) const; private: void startServer( struct sockaddr_in &name, int nPoolSize ); void initServer( struct sockaddr_in &name, int nPoolSize ); fd_set fdActive; socket_t iSocket; int iPort; }; } #endif