#include "stdafx.h" #include "NetworkSocketManager.h" #include #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::MakeListenSocket(int port) { SOCKET s_listenSocket = NULL; struct sockaddr_in addr = {}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons((WORD)port); s_listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s_listenSocket == INVALID_SOCKET) { app.DebugPrintf("socket() failed: %d\n", WSAGetLastError()); 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, (struct sockaddr*)&addr, sizeof(addr)); 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; }