/c++/socket/socket.h
C Header | 99 lines | 44 code | 24 blank | 31 comment | 0 complexity | 55ae8ec487ce37d25ba26712069708e0 MD5 | raw file
- /*
- Socket.h
- Copyright (C) RenĂŠ Nyffenegger
- This source code is provided 'as-is', without any express or implied
- warranty. In no event will the author be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this source code must not be misrepresented; you must not
- claim that you wrote the original source code. If you use this source code
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original source code.
- 3. This notice may not be removed or altered from any source distribution.
- RenĂŠ Nyffenegger rene.nyffenegger@adp-gmbh.ch
- */
- #ifndef SOCKET_H
- #define SOCKET_H
- #include <WinSock2.h>
- #include <string>
- enum TypeSocket {BlockingSocket, NonBlockingSocket};
- class Socket {
- public:
- virtual ~Socket();
- Socket(const Socket&);
- Socket& operator=(Socket&);
- std::string ReceiveLine();
- std::string ReceiveBytes();
- void Close();
- // The parameter of SendLine is not a const reference
- // because SendLine modifes the std::string passed.
- void SendLine (std::string);
- // The parameter of SendBytes is a const reference
- // because SendBytes does not modify the std::string passed
- // (in contrast to SendLine).
- void SendBytes(const std::string&);
- protected:
- friend class SocketServer;
- friend class SocketSelect;
- Socket(SOCKET s);
- Socket();
- SOCKET s_;
- int* refCounter_;
- private:
- static void Start();
- static void End();
- static int nofSockets_;
- };
- class SocketClient : public Socket {
- public:
- SocketClient(const std::string& host, int port);
- };
- class SocketServer : public Socket {
- public:
- SocketServer(int port, int connections, TypeSocket type=BlockingSocket);
- Socket* Accept();
- };
- // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/wsapiref_2tiq.asp
- class SocketSelect {
- public:
- SocketSelect(Socket const * const s1, Socket const * const s2=NULL, TypeSocket type=BlockingSocket);
- bool Readable(Socket const * const s);
- private:
- fd_set fds_;
- };
- #endif