#ifndef __LIBT2N_SOCKET_HANDLER
#define __LIBT2N_SOCKET_HANDLER
+#include <iostream>
+
#include "types.hxx"
namespace libt2n
{
+/** @brief handles socket based communication.
+ Don't use directly, use socket_server or socket_client_connection instead.
+*/
class socket_handler
{
private:
socket_type_value socket_type;
- bool data_waiting(long long usec_timeout=-1);
+ bool data_waiting(long long usec_timeout,long long *timeout_remaining=NULL);
protected:
int sock;
void set_socket_options(int sock);
- void log(log_level_values level, const std::string& message)
- { log(level,message.c_str()); }
- virtual void log(log_level_values level, const char* message)
- { return; }
+ virtual std::ostream* get_logstream(log_level_values level)
+ { return NULL; }
- public:
- socket_type_value get_type()
- { return socket_type; }
+ void socket_write(const std::string& data);
- bool fill_buffer(std::string& buffer, long long usec_timeout);
+ virtual void close();
+
+ bool fill_buffer(std::string& buffer, long long usec_timeout, long long*timeout_remaining=NULL);
bool fill_buffer(std::string& buffer);
- void close();
+ public:
+ /// is this a tcp or udp socket connection
+ socket_type_value get_type()
+ { return socket_type; }
- void write(const std::string& data);
+ bool is_closed();
};
}