diff --git a/CHANGES b/CHANGES index 0b9887545..13c235b8d 100644 --- a/CHANGES +++ b/CHANGES @@ -45,6 +45,7 @@ Bugfixes: - Qt: Fix crash when adjusting settings after closing a game - Qt: Fix crash when starting GDB stub after closing a game - Qt: Fix patch loading while a game is running + - Util: Fix sockets on Windows Misc: - GBA Audio: Change internal audio sample buffer from 32-bit to 16-bit samples - GBA Memory: Simplify memory API and use fixed bus width diff --git a/src/platform/qt/GBAApp.cpp b/src/platform/qt/GBAApp.cpp index 6605d91aa..ca5ae51e1 100644 --- a/src/platform/qt/GBAApp.cpp +++ b/src/platform/qt/GBAApp.cpp @@ -24,6 +24,8 @@ GBAApp::GBAApp(int& argc, char* argv[]) SDL_Init(SDL_INIT_NOPARACHUTE); #endif + SocketSubsystemInit(); + QApplication::setApplicationName(PROJECT_NAME); QApplication::setApplicationVersion(PROJECT_VERSION); diff --git a/src/util/socket.h b/src/util/socket.h index 546f59c18..a66881323 100644 --- a/src/util/socket.h +++ b/src/util/socket.h @@ -42,18 +42,35 @@ struct Address { }; }; -static inline void SocketSubsystemInitialize() { +static inline void SocketSubsystemInit() { #ifdef _WIN32 - WSAStartup(MAKEWORD(2, 2), 0); + WSADATA data; + WSAStartup(MAKEWORD(2, 2), &data); +#endif +} + +static inline int SocketError() { +#ifdef _WIN32 + return WSAGetLastError(); +#else + return errno; +#endif +} + +static inline bool SocketWouldBlock() { +#ifdef _WIN32 + return SocketError() == WSAEWOULDBLOCK; +#else + return SocketError() == EWOULDBLOCK || SocketError() == EAGAIN; #endif } static inline ssize_t SocketSend(Socket socket, const void* buffer, size_t size) { - return write(socket, buffer, size); + return send(socket, buffer, size, 0); } static inline ssize_t SocketRecv(Socket socket, void* buffer, size_t size) { - return read(socket, buffer, size); + return recv(socket, buffer, size, 0); } static inline Socket SocketOpenTCP(int port, const struct Address* bindAddress) { @@ -87,7 +104,7 @@ static inline Socket SocketOpenTCP(int port, const struct Address* bindAddress) } if (err) { close(sock); - return -1; + return INVALID_SOCKET; } return sock; } @@ -123,7 +140,7 @@ static inline Socket SocketConnectTCP(int port, const struct Address* destinatio if (err) { close(sock); - return -1; + return INVALID_SOCKET; } return sock; }