sources/network/udpsocket.cpp

changeset 81
a18aaf460648
parent 73
07dda51a7a8e
child 88
08ccaf26cffd
--- a/sources/network/udpsocket.cpp	Fri May 15 21:43:21 2015 +0300
+++ b/sources/network/udpsocket.cpp	Tue May 26 11:41:58 2015 +0300
@@ -28,17 +28,24 @@
 	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-#include <sys/socket.h>
+#include "udpsocket.h"
+
+#ifndef _WIN32
+# include <sys/socket.h>
+# include <netinet/in.h>
+#else
+# include <winsock2.h>
+# include <ws2tcpip.h>
+#endif
+
 #include <sys/types.h>
 #include <sys/time.h>
-#include <netinet/in.h>
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include "udpsocket.h"
 #include "../huffman/huffman.h"
 
-static unsigned char g_huffmanBuffer[131072];
+static char g_huffmanBuffer[131072];
 
 // -----------------------------------------------------------------------------
 //
@@ -54,9 +61,9 @@
 
 // -------------------------------------------------------------------------------------------------
 //
-METHOD
-UDPSocket::set_blocking (bool a) -> bool
+bool UDPSocket::set_blocking (bool a)
 {
+#ifndef _WIN32
 	int flags = fcntl (m_socket, F_GETFL, 0);
 	int newflags = a ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK);
 
@@ -67,6 +74,17 @@
 	}
 
 	return true;
+#else
+	unsigned long mode = a ? 0 : 1;
+
+	if (ioctlsocket (m_socket, FIONBIO, &mode) != 0)
+	{
+		m_error = strerror (errno);
+		return false;
+	}
+
+	return true;
+#endif
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -91,8 +109,7 @@
 
 // -------------------------------------------------------------------------------------------------
 //
-METHOD
-UDPSocket::read (Datagram& datagram) -> bool
+bool UDPSocket::read (Datagram& datagram)
 {
 	sockaddr_in claddr;
 	socklen_t socklen = sizeof claddr;
@@ -109,7 +126,8 @@
 
 	unsigned char decodedPacket[MAX_DATAGRAM_LENGTH];
 	int decodedLength = sizeof decodedPacket;
-	HUFFMAN_Decode (g_huffmanBuffer, decodedPacket, length, &decodedLength);
+	HUFFMAN_Decode (reinterpret_cast<unsigned char*> (g_huffmanBuffer),
+		decodedPacket, length, &decodedLength);
 	datagram.from.host = ntohl (claddr.sin_addr.s_addr);
 	datagram.from.port = ntohs (claddr.sin_port);
 	datagram.data = Bytestream (decodedPacket, decodedLength);
@@ -122,7 +140,8 @@
 UDPSocket::send (const IPAddress& address, const Bytestream& data) -> bool
 {
 	int encodedlength = sizeof g_huffmanBuffer;
-	HUFFMAN_Encode (data.data(), g_huffmanBuffer, data.written_length(), &encodedlength);
+	HUFFMAN_Encode (data.data(), reinterpret_cast<unsigned char*> (g_huffmanBuffer),
+		data.written_length(), &encodedlength);
 	sockaddr_in claddr = address.to_sockaddr_in();
 	int res = ::sendto (m_socket, g_huffmanBuffer, encodedlength, 0,
 		reinterpret_cast<sockaddr*> (&claddr), sizeof claddr);

mercurial