/usr/include/happycoders/socket/netsocket.hh is in happycoders-libsocket-dev 1.6-1ubuntu4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | /*
** netsocket.hh
** Login : Julien Lemoine <speedblue@happycoders.org>
** Started on Mon May 12 22:23:32 2003 Julien Lemoine
** $Id: netsocket.hh,v 1.2 2004/06/01 21:30:53 speedblue Exp $
**
** Copyright (C) 2003,2004 Julien Lemoine
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU Lesser General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program 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 NETSOCKET_HH_
# define NETSOCKET_HH_
#include "socket.hh"
namespace Network
{
/// @author Julien Lemoine <speedblue at happycoders dot org>
/// @brief This class represent an abstract socket connection (udp
/// | tcp server | tcp client)
class NetSocket : public Socket
{
public:
NetSocket(SOCKET_KIND kind, SOCKET_VERSION version = V4) :
Socket(kind, version), _port(0)
{
}
NetSocket(SOCKET_KIND kind, PROTO_KIND pkind, SOCKET_VERSION version = V4) :
Socket(kind, pkind, version), _port(0)
{
}
virtual ~NetSocket() {}
public:
/// @brief function used to send a msg to a specific host (UDP)
virtual void writeto(const std::string& str,
const std::string& host, int port);
/// @brief function used by >> operator (read a string on
/// current socket)
std::string read();
/// @brief read a string with a timeout
std::string read(int timeout);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable
std::string read(int& port, std::string& host);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable (with a timeout on listen)
std::string read(int& port, std::string& host, int timeout);
/// @brief read a string from socket
/// @param size represente the number of byte to read
std::string readn(unsigned int size);
/// @brief read a string with a timeout
/// @param size represente the number of byte to read
std::string readn(int timeout, unsigned int size);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable
/// @param size represente the number of byte to read
std::string readn(int& port, std::string& host, unsigned int size);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable (with a timeout on listen)
/// @param size represente the number of byte to read
std::string readn(int& port, std::string& host, int timeout,
unsigned int size);
protected:
/// @brief internal function (construct a sockaddr)
struct sockaddr_in _get_addr(int port) const;
#ifdef IPV6_ENABLED
struct sockaddr_in6 _get_addr6(int port) const;
#endif
/// @brief internal function (construct a sockaddr)
/// @exception HostnameError when host is incorrect
struct sockaddr_in _get_addr(const std::string& host,
int port) const;
#ifdef IPV6_ENABLED
struct sockaddr_in6 _get_addr6(const std::string& host,
int port) const;
#endif
/// @brief Bind a UDP server
/// @exception SocketError when socket libc function return a
/// negative value
/// @exception Exception if the selected protocole is incorrect
/// (is you receive this exception, please submit a bug report)
int _bind(int port, const std::string& host);
/// @brief Bind a TCP server
/// @exception SocketError when socket libc function return a
/// negative value
/// @exception SetsockoptError when setsockopt libc function return a
/// negative value
/// @exception BindError when bind libc function return a
/// negative value
/// @exception Exception if the selected protocole is incorrect
/// (is you receive this exception, please submit a bug report)
int _bind(int port);
/// @brief Wait for a client
/// @exception AcceptError when accept libc function return a
/// negative value
int _accept(int port, int server_socket) const;
/// @brief Get Client Ip
std::string _get_ip(int port, int socket) const;
/// @brief Connect to a hostname
/// @exception ConnectError when connect libc function return a
/// negative value
void _connect(int socket, int port,
const std::string& host) const;
/// @brief Get a line from socket (when used with textual protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
std::string _read_line(int socket);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable (when used with textual protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
/// @exception GetpeernameError when getpeername libc function
/// return a negative value
std::string _read_line(int socket, int& port,
std::string& host);
/// @brief Get a line from socket and store client hostname and
/// port in port and host variable (when used with binary protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
/// @exception GetpeernameError when getpeername libc function
/// return a negative value
virtual std::string _read_line_bin(int socket, int& port,
std::string& host,
unsigned int pkg_size) = 0;
/// @brief Get a line from socket (when used with binary protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
virtual std::string _read_line_bin(int socket, unsigned int size) = 0;
/// @brief Write a string to a socket to a particular host (UDP)
/// (when used with textual protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
void _write_str(int socket, const std::string& str,
const std::string& host, int port) const;
/// @brief Write a string to a socket to a particular host (UDP)
/// (when used with binary protocol)
/// @exception NoConnection when there is no open socket
/// @exception ConnectionClosed when there is no more connection
void _write_str_bin(int socket, const std::string& str,
const std::string& host, int port) const;
protected:
int _port;
};
}
#endif /* !NETSOCKET_HH_ */
|