diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-12-14 06:48:15 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-12-14 06:48:15 +0100 |
commit | 86b0f9ddb6407baa394e548e80748ec6e9b120e6 (patch) | |
tree | ed44dc9cbb7614a0ca6b8b77da08eca485452fc7 /lib/socket/socket.h | |
parent | 7c68632107e2b42db5fbb7d032f5d957e99be7f9 (diff) | |
parent | a55a225899dbd47dd4238adf3a49f62846cb87f9 (diff) |
Merge tag 'upstream/1.0.0'
Upstream version 1.0.0
Diffstat (limited to 'lib/socket/socket.h')
-rw-r--r-- | lib/socket/socket.h | 427 |
1 files changed, 0 insertions, 427 deletions
diff --git a/lib/socket/socket.h b/lib/socket/socket.h deleted file mode 100644 index 2c4d777..0000000 --- a/lib/socket/socket.h +++ /dev/null @@ -1,427 +0,0 @@ -/* - * C++ sockets on Unix and Windows - * Copyright (C) 2002 <unknown> - * Copyright (C) 2010 Uditha Atukorala - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 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 General Public License for more details. - * - * You should have received a copy of the GNU 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 SL_SOCKET_H -#define SL_SOCKET_H - -#include <string> // For string -#include <exception> // For exception class -#include <vector> // For vectors - -#ifdef WIN32 - #include <winsock.h> // For socket(), connect(), send(), and recv() - typedef int socklen_t; - typedef char raw_type; // Type used for raw data on this platform -#else - #include <netinet/in.h> // For sockaddr_in - typedef void raw_type; // Type used for raw data on this platform -#endif - -using namespace std; - -namespace socketlibrary { - -/** - * Function to fill in address structure given an address and port - */ -void fillAddr(const string &address, unsigned short port, sockaddr_in &addr); - -/** - * Signals a problem with the execution of a socket call. - */ -class SocketException : public exception { -public: - /** - * Construct a SocketException with a explanatory message. - * @param message explanatory message - * @param incSysMsg true if system message (from strerror(errno)) - * should be postfixed to the user provided message - */ - SocketException(const string &message, bool inclSysMsg = false) throw(); - - /** - * Provided just to guarantee that no exceptions are thrown. - */ - ~SocketException() throw(); - - /** - * Get the exception message - * @return exception message - */ - const char *what() const throw(); - -private: - string userMessage; // Exception message -}; - - -/** - * Base class representing basic communication endpoint - */ -class Socket { -public: - /** - * Close and deallocate this socket - */ - ~Socket(); - - /** - * Get the local address - * @return local address of socket - * @exception SocketException thrown if fetch fails - */ - string getLocalAddress() throw(SocketException); - - /** - * Get the local port - * @return local port of socket - * @exception SocketException thrown if fetch fails - */ - unsigned short getLocalPort() throw(SocketException); - - /** - * Set the local port to the specified port and the local address - * to any interface - * @param localPort local port - * @exception SocketException thrown if setting local port fails - */ - void setLocalPort(unsigned short localPort) throw(SocketException); - - /** - * Set the local port to the specified port and the local address - * to the specified address. If you omit the port, a random port - * will be selected. - * @param localAddress local address - * @param localPort local port - * @exception SocketException thrown if setting local port or address fails - */ - void setLocalAddressAndPort(const string &localAddress, unsigned short localPort = 0) throw(SocketException); - - /** - * If WinSock, unload the WinSock DLLs; otherwise do nothing. We ignore - * this in our sample client code but include it in the library for - * completeness. If you are running on Windows and you are concerned - * about DLL resource consumption, call this after you are done with all - * Socket instances. If you execute this on Windows while some instance of - * Socket exists, you are toast. For portability of client code, this is - * an empty function on non-Windows platforms so you can always include it. - * @param buffer buffer to receive the data - * @param bufferLen maximum number of bytes to read into buffer - * @return number of bytes read, 0 for EOF, and -1 for error - * @exception SocketException thrown WinSock clean up fails - */ - static void cleanUp() throw(SocketException); - - /** - * Resolve the specified service for the specified protocol to the - * corresponding port number in host byte order - * @param service service to resolve (e.g., "http") - * @param protocol protocol of service to resolve. Default is "tcp". - */ - static unsigned short resolveService(const string &service, const string &protocol = "tcp"); - -private: - // Prevent the user from trying to use value semantics on this object - Socket(const Socket &sock); - void operator=(const Socket &sock); - -protected: - int sock; // Socket descriptor - Socket(int type, int protocol) throw(SocketException); - Socket(int sock); -}; - -/** - * Socket which is able to connect, send, and receive - */ -class CommunicatingSocket : public Socket { -public: - /** - * Establish a socket connection with the given foreign - * address and port - * @param foreignAddress foreign address (IP address or name) - * @param foreignPort foreign port - * @exception SocketException thrown if unable to establish connection - */ - void connect(const string &foreignAddress, unsigned short foreignPort) throw(SocketException); - - /** - * Write the given buffer to this socket. Call connect() before - * calling send() - * @param buffer buffer to be written - * @param bufferLen number of bytes from buffer to be written - * @exception SocketException thrown if unable to send data - */ - void send(const void *buffer, int bufferLen) throw(SocketException); - - /** - * Read into the given buffer up to bufferLen bytes data from this - * socket. Call connect() before calling recv() - * @param buffer buffer to receive the data - * @param bufferLen maximum number of bytes to read into buffer - * @return number of bytes read, 0 for EOF, and -1 for error - * @exception SocketException thrown if unable to receive data - */ - int recv(void *buffer, int bufferLen) throw(SocketException); - - /** - * Read into the given buffer up to bufferLen bytes data from this - * socket but don't remove the read bytes from the socket read buffer. - * Call connect() before calling peek() - * - * @param buffer buffer to receive the data - * @param bufferLen maximum number of bytes to read into buffer - * @return number of bytes read, 0 for EOF, and -1 for error - * @exception SocketException thrown if unable to receive data - */ - int peek(void *buffer, int bufferLen) throw(SocketException); - - /** - * Read a line into the given buffer from this socket. - * Call connect() before calling recv() - * - * @param buffer buffer to receive the data - * @param bufferLen maximum number of bytes to read into buffer - * @param delimiter (optional) end of line delimiter - * @return number of bytes read, 0 for EOF, and -1 for error - * @exception SocketException thrown if unable to receive data - */ - int readLine(char *buffer, int bufferLen, const char delimiter = '\n') throw(SocketException); - - /** - * Get the foreign address. Call connect() before calling recv() - * @return foreign address - * @exception SocketException thrown if unable to fetch foreign address - */ - string getForeignAddress() throw(SocketException); - - /** - * Get the foreign port. Call connect() before calling recv() - * @return foreign port - * @exception SocketException thrown if unable to fetch foreign port - */ - unsigned short getForeignPort() throw(SocketException); - -protected: - CommunicatingSocket(int type, int protocol) throw(SocketException); - CommunicatingSocket(int newSD); -}; - -/** - * TCP socket for communication with other TCP sockets - */ -class TCPSocket : public CommunicatingSocket { -public: - /** - * Construct a TCP socket with no connection - * @exception SocketException thrown if unable to create TCP socket - */ - TCPSocket() throw(SocketException); - - /** - * Construct a TCP socket with a connection to the given foreign address - * and port - * @param foreignAddress foreign address (IP address or name) - * @param foreignPort foreign port - * @exception SocketException thrown if unable to create TCP socket - */ - TCPSocket(const string &foreignAddress, unsigned short foreignPort) throw(SocketException); - -private: - friend class TCPServerSocket; // Access for TCPServerSocket::accept() connection creation - friend class TCPServerSocketM; // Access for TCPServerSocketM::accept() connection creation - TCPSocket(int newSD); -}; - -/** - * TCP socket class for servers - */ -class TCPServerSocket : public Socket { -public: - /** - * Construct a TCP socket for use with a server, accepting connections - * on the specified port on any interface - * @param localPort local port of server socket, a value of zero will - * give a system-assigned unused port - * @param queueLen maximum queue length for outstanding - * connection requests (default 5) - * @exception SocketException thrown if unable to create TCP server socket - */ - TCPServerSocket(unsigned short localPort, int queueLen = 5) throw(SocketException); - - /** - * Construct a TCP socket for use with a server, accepting connections - * on the specified port on the interface specified by the given address - * @param localAddress local interface (address) of server socket - * @param localPort local port of server socket - * @param queueLen maximum queue length for outstanding - * connection requests (default 5) - * @exception SocketException thrown if unable to create TCP server socket - */ - TCPServerSocket(const string &localAddress, unsigned short localPort, int queueLen = 5) throw(SocketException); - - /** - * Blocks until a new connection is established on this socket or error - * @return new connection socket - * @exception SocketException thrown if attempt to accept a new connection fails - */ - TCPSocket *accept() throw(SocketException); - -private: - void setListen(int queueLen) throw(SocketException); -}; - -/** - * TCP socket class for multi-client servers - */ -class TCPServerSocketM : public TCPServerSocket { -public: - - /** - * Construct a TCP socket for use with a server, accepting connections - * on the specified port on any interface - * @param localPort local port of server socket, a value of zero will - * give a system-assigned unused port - * @param queueLen maximum queue length for outstanding - * connection requests (default 5) - * @exception SocketException thrown if unable to create TCP server socket - */ - TCPServerSocketM(unsigned short localPort, int queueLen = 5) throw(SocketException); - - /** - * Blocks until a new connection is established on this socket or error - * @return new connection socket - * @exception SocketException thrown if attempt to accept a new connection fails - */ - TCPSocket *accept() throw(SocketException); - - /** - * Checks for incoming connections or error - * @return boolean (true if incoming connections are present) - * @exception SocketException thrown if attempt to check for new connections fail - */ - bool pendingConnections() throw(SocketException); - - /** - * Checks for read waiting clients - * @param clients a vector of TCPSocket pointers to get the waiting clients - * @return number of clients waiting - * @exception SocketException thrown if attempt to check for waiting clients fail - */ - int getWaitingClients(vector<TCPSocket *> &clients) throw (SocketException); - - /** - * Closes the connection to a client - * @param client the client TCPSocket to close - */ - void closeClientConnection(TCPSocket *client); - -private: - fd_set fds_master; // master file descriptor list - int fdmax; // maximum file descriptor number - - vector<TCPSocket *> v_clients; -}; - -/** - * UDP socket class - */ -class UDPSocket : public CommunicatingSocket { -public: - /** - * Construct a UDP socket - * @exception SocketException thrown if unable to create UDP socket - */ - UDPSocket() throw(SocketException); - - /** - * Construct a UDP socket with the given local port - * @param localPort local port - * @exception SocketException thrown if unable to create UDP socket - */ - UDPSocket(unsigned short localPort) throw(SocketException); - - /** - * Construct a UDP socket with the given local port and address - * @param localAddress local address - * @param localPort local port - * @exception SocketException thrown if unable to create UDP socket - */ - UDPSocket(const string &localAddress, unsigned short localPort) throw(SocketException); - - /** - * Unset foreign address and port - * @return true if disassociation is successful - * @exception SocketException thrown if unable to disconnect UDP socket - */ - void disconnect() throw(SocketException); - - /** - * Send the given buffer as a UDP datagram to the - * specified address/port - * @param buffer buffer to be written - * @param bufferLen number of bytes to write - * @param foreignAddress address (IP address or name) to send to - * @param foreignPort port number to send to - * @return true if send is successful - * @exception SocketException thrown if unable to send datagram - */ - void sendTo(const void *buffer, int bufferLen, const string &foreignAddress, unsigned short foreignPort) throw(SocketException); - - /** - * Read read up to bufferLen bytes data from this socket. The given buffer - * is where the data will be placed - * @param buffer buffer to receive data - * @param bufferLen maximum number of bytes to receive - * @param sourceAddress address of datagram source - * @param sourcePort port of data source - * @return number of bytes received and -1 for error - * @exception SocketException thrown if unable to receive datagram - */ - int recvFrom(void *buffer, int bufferLen, string &sourceAddress, unsigned short &sourcePort) throw(SocketException); - - /** - * Set the multicast TTL - * @param multicastTTL multicast TTL - * @exception SocketException thrown if unable to set TTL - */ - void setMulticastTTL(unsigned char multicastTTL) throw(SocketException); - - /** - * Join the specified multicast group - * @param multicastGroup multicast group address to join - * @exception SocketException thrown if unable to join group - */ - void joinGroup(const string &multicastGroup) throw(SocketException); - - /** - * Leave the specified multicast group - * @param multicastGroup multicast group address to leave - * @exception SocketException thrown if unable to leave group - */ - void leaveGroup(const string &multicastGroup) throw(SocketException); - -private: - void setBroadcast(); -}; - -} // End of namespace SocketLibrary - -#endif /* !SL_SOCKET_H */ |