Index: common/compiler.h
===================================================================
--- common/compiler.h	(revision d87708d60d0d5ff5a1442042899969dbe0daf09a)
+++ common/compiler.h	(revision d87708d60d0d5ff5a1442042899969dbe0daf09a)
@@ -0,0 +1,11 @@
+#ifdef _WIN64
+	#define WINDOWS
+#elif _WIN32
+	#define WINDOWS
+#elif __linux
+	#define LINUX
+#elif __unix
+	#define LINUX
+#elif __posix
+	#define LINUX
+#endif
Index: common/message.cpp
===================================================================
--- common/message.cpp	(revision d87708d60d0d5ff5a1442042899969dbe0daf09a)
+++ common/message.cpp	(revision d87708d60d0d5ff5a1442042899969dbe0daf09a)
@@ -0,0 +1,20 @@
+#include "message.h"
+
+#include "compiler.h"
+
+#ifdef WINDOWS
+	#include <winsock2.h>
+#endif
+
+int sendMessage(NETWORK_MSG *msg, int sock, struct sockaddr_in *dest)
+{
+	return sendto(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, sizeof(struct sockaddr_in));
+}
+
+int receiveMessage(NETWORK_MSG *msg, int sock, struct sockaddr_in *dest)
+{
+	int socklen = sizeof(struct sockaddr_in);
+
+	// assume we don't care about the value of socklen
+	return recvfrom(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, &socklen);
+}
