#ifndef __SOCKET_HPP #define __SOCKET_HPP //IP only class Address { public: Address(); //any Address(const char *hostname); Address(long addr); unsigned long a; //host order }; class Port { public: Port(); Port(const char *service); Port(unsigned); unsigned short p; //host order }; class Socket { protected: int s; int e; Socket(int type, int protocol); Socket(int sock); public: virtual ~Socket(); int bind(Address a, Port p, int reuse=0); int connect(Address a, Port p); Address peerAddress(); Port peerPort(); Address selfAddress(); Port selfPort(); int recvReady(); int recv(void *buf, int buflen); int sendReady(); int send(const void *buf, int buflen); int close(); int lastError() const { return e; } int handle() { return s; } }; class TCPSocket : public Socket { TCPSocket(int sock); public: TCPSocket(); Socket *accept(Address *peeraddress, Port *peerport); int listen(); int linger(int onoff); }; class UDPSocket : public Socket { public: UDPSocket(); int sendTo(const void *buf, int buflen, Address a, Port p); int recvFrom(void *buf, int buflen, Address *a, Port *p); }; class RAWSocket : public Socket { public: RAWSocket(int protocol); RAWSocket(const char *protocol); int sendTo(const void *buf, int buflen, Address a, Port p); int recvFrom(void *buf, int buflen, Address *a, Port *p); }; #endif