#include "stdafx.h" #include "NetworkSocketManager.h" #include #include // PIEBOT: Adding this because Sony systems uses BSD apis // which uses socketclose instead of closesocket. int NetworkSocketManager::CloseSocket(SOCKET sock) { return closesocket(sock); } int NetworkSocketManager::getSocketError(SOCKET socket) { return WSAGetLastError(); } bool NetworkSocketManager::IsSocketValid(SOCKET sock) { return sock != INVALID_SOCKET; } bool NetworkSocketManager::IsSentValid(int sent) { return sent != SOCKET_ERROR; } bool NetworkSocketManager::InitNetwork() { WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != 0) { app.DebugPrintf("WSAStartup failed: %d\n", result); return false; } } SOCKET NetworkSocketManager::MakeHostSocket(int port) { SOCKET s_listenSocket = NULL; struct addrinfo hints = {}; struct addrinfo *result = NULL; hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; char portStr[16]; sprintf_s(portStr, "%d", port); int iResult = getaddrinfo(NULL, portStr, &hints, &result); if (iResult != 0) { app.DebugPrintf("getaddrinfo failed: %d\n", iResult); return INVALID_SOCKET; } s_listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (s_listenSocket == INVALID_SOCKET) { app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); freeaddrinfo(result); return INVALID_SOCKET; } // PIEBOT: time for part 2, binding and listening. int opt = 1; setsockopt(s_listenSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof(opt)); iResult = ::bind(s_listenSocket, result->ai_addr, (int)result->ai_addrlen); freeaddrinfo(result); if (iResult == SOCKET_ERROR) { app.DebugPrintf("bind() failed: %d\n", WSAGetLastError()); closesocket(s_listenSocket); return INVALID_SOCKET; } iResult = listen(s_listenSocket, SOMAXCONN); if (iResult == SOCKET_ERROR) { app.DebugPrintf("listen() failed: %d\n", WSAGetLastError()); closesocket(s_listenSocket); return INVALID_SOCKET; } return s_listenSocket; }