summaryrefslogtreecommitdiff
path: root/src/socket.h
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2010-11-27 01:02:21 +0200
committerPerttu Ahola <celeron55@gmail.com>2010-11-27 01:02:21 +0200
commit4e249fb3fbf75f0359758760d88e22aa5b14533c (patch)
tree323087d05efbd2ace27b316d4f017cf812a31992 /src/socket.h
downloadminetest-4e249fb3fbf75f0359758760d88e22aa5b14533c.tar.gz
minetest-4e249fb3fbf75f0359758760d88e22aa5b14533c.tar.bz2
minetest-4e249fb3fbf75f0359758760d88e22aa5b14533c.zip
Initial files
Diffstat (limited to 'src/socket.h')
-rw-r--r--src/socket.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/socket.h b/src/socket.h
new file mode 100644
index 000000000..1cbed91cf
--- /dev/null
+++ b/src/socket.h
@@ -0,0 +1,98 @@
+#ifndef SOCKET_HEADER
+#define SOCKET_HEADER
+
+#ifdef _WIN32
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
+ #pragma comment(lib, "wsock32.lib")
+typedef SOCKET socket_t;
+typedef int socklen_t;
+#else
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <fcntl.h>
+ #include <netdb.h>
+ #include <unistd.h>
+typedef int socket_t;
+#endif
+
+#include <ostream>
+#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
+