From 9a2e2998e9569d42e99b06f044eec7065233b201 Mon Sep 17 00:00:00 2001 From: StapleButter Date: Thu, 11 May 2017 19:57:49 +0200 Subject: salvage socket init code --- src/wx/Platform.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'src/wx') diff --git a/src/wx/Platform.cpp b/src/wx/Platform.cpp index 482b886..3beca2f 100644 --- a/src/wx/Platform.cpp +++ b/src/wx/Platform.cpp @@ -17,14 +17,90 @@ */ #include +#include +#include #include "../Platform.h" +#ifdef __WXMSW__ + #include + #include + #define socket_t SOCKET + #define sockaddr_t SOCKADDR + #define pcap_dev_name description +#else + #include + #include + #include + #define socket_t int + #define sockaddr_t struct sockaddr + #define closesocket close + #define pcap_dev_name name +#endif + +#ifndef INVALID_SOCKET +#define INVALID_SOCKET (socket_t)-1 +#endif + namespace Platform { -// +socket_t MPSocket; +sockaddr_t MPSendAddr; + + +bool MP_Init() +{ + BOOL opt_true = TRUE; + int res; + + MPSocket = socket(AF_INET, SOCK_DGRAM, 0); + if (MPSocket < 0) + { + return false; + } + + res = setsockopt(MPSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt_true, sizeof(BOOL)); + if (res < 0) + { + closesocket(MPSocket); + MPSocket = INVALID_SOCKET; + return false; + } + + sockaddr_t saddr; + saddr.sa_family = AF_INET; + *(u32*)&saddr.sa_data[2] = htonl(INADDR_ANY); + *(u16*)&saddr.sa_data[0] = htons(7064); + res = bind(MPSocket, &saddr, sizeof(sockaddr_t)); + if (res < 0) + { + closesocket(MPSocket); + MPSocket = INVALID_SOCKET; + return false; + } + + res = setsockopt(MPSocket, SOL_SOCKET, SO_BROADCAST, (const char*)&opt_true, sizeof(BOOL)); + if (res < 0) + { + closesocket(MPSocket); + MPSocket = INVALID_SOCKET; + return false; + } + + MPSendAddr.sa_family = AF_INET; + *(u32*)&MPSendAddr.sa_data[2] = htonl(INADDR_BROADCAST); + *(u16*)&MPSendAddr.sa_data[0] = htons(7064); + + return true; +} + +void MP_DeInit() +{ + if (MPSocket >= 0) + closesocket(MPSocket); +} } -- cgit v1.2.3