/*************************************************************************** * Copyright (C) 2006 by Gerd v. Egidy * * gve@intra2net.com * * * * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License version * * 2.1 as published by the Free Software Foundation. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef __LIBT2N_SOCKET_HANDLER #define __LIBT2N_SOCKET_HANDLER #include #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: static const unsigned int recv_buffer_size=2048; static const unsigned int write_block_size=4096; socket_type_value socket_type; bool data_waiting(long long usec_timeout,long long *timeout_remaining=NULL); protected: int sock; socket_handler(int _sock, socket_type_value _socket_type) { sock=_sock; socket_type=_socket_type; } void set_socket_options(int sock); virtual std::ostream* get_logstream(log_level_values level) { return NULL; } void socket_write(const std::string& data); virtual void close(); bool fill_buffer(std::string& buffer, long long usec_timeout, long long*timeout_remaining=NULL); bool fill_buffer(std::string& buffer); public: /// is this a tcp or udp socket connection socket_type_value get_type() { return socket_type; } bool is_closed(); }; } #endif