#ifndef SOCKET_HEADER #define SOCKET_HEADER #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #include #include #pragma comment(lib, "wsock32.lib") typedef SOCKET socket_t; typedef int socklen_t; #else #include #include #include #include #include typedef int socket_t; #endif #include #include "exceptions.h" #include "constants.h" class SocketException : public BaseException { public: SocketException(const char *s): BaseException(s) { } }; class ResolveError : public BaseException { public: ResolveError(const char *s): BaseException(s) { } }; class SendFailedException : public BaseException { public: SendFailedException(const char *s): BaseException(s) { } }; void sockets_init(); void sockets_cleanup(); class Address { public: Address(); Address(unsigned int address, unsigned short port); Address(unsigned int a, unsigned int b, unsigned int c, unsigned int d, unsigned short port); bool operator==(Address &address); bool operator!=(Address &address); void Resolve(const char *name); unsigned int getAddress() const; unsigned short getPort() const; void setAddress(unsigned int address); void setPort(unsigned short port); void print(std::ostream *s) const; void print() const; private: unsigned int m_address; unsigned short m_port; }; class UDPSocket { public: UDPSocket(); ~UDPSocket(); void Bind(unsigned short port); //void Close(); //bool IsOpen(); void Send(const Address & destination, const void * data, int size); // Returns -1 if there is no data int Receive(Address & sender, void * data, int size); int GetHandle(); // For debugging purposes only void setTimeoutMs(int timeout_ms); // Returns true if there is data, false if timeout occurred bool WaitData(int timeout_ms); private: int m_handle; int m_timeout_ms; }; #endif