#include <sys/types.h>
#include "server.hxx"
+#include "socket_handler.hxx"
+#include "types.hxx"
namespace libt2n
{
/**
Socket based server class
*/
-class socket_server : public server
+class socket_server : public socket_handler, server
{
- public:
- enum socket_type_value { tcp_s, unix_s };
-
private:
- int sock;
fd_set connection_set;
- socket_type_value socket_type;
std::string unix_path;
- void set_socket_options(int sock);
void new_connection();
+ protected:
+ void log(log_level_values level, const std::string& message)
+ { log(level,message.c_str()); }
+ void log(log_level_values level, const char* message)
+ { server::log(level,message); }
+
public:
socket_server(int port, const char* ip="0.0.0.0");
socket_server(const char* path, mode_t filemode, const char* user="", const char* group="");
~socket_server();
- socket_type_value get_type()
- { return socket_type; }
-
void fill_buffer(long long usec_timeout=-1);
void fill_connection_buffers();
+
+ void remove_connection_socket(int sock);
};
/**
Socket based connection class
*/
-class socket_connection : public connection
+class socket_server_connection : public socket_handler, server_connection
{
friend class socket_server;
private:
- static const int recv_buffer_size=2048;
+ socket_server_connection(int _sock, socket_type_value _stype, int _timeout)
+ : server_connection(_timeout), socket_handler(_sock,_stype)
+ { }
- int sock;
+ void log(log_level_values level, const char* message)
+ { if(my_server) my_server->log(level,message); }
- socket_connection(int _sock, int _timeout);
+ void real_write(const std::string& data)
+ { socket_handler::write(data); }
public:
+ void fill_buffer(long long usec_timeout=-1)
+ { socket_handler::fill_buffer(buffer,usec_timeout); }
void close();
- void fill_buffer(fd_set &cur_fdset);
- void write(const std::string& data);
};
}