bool GDBStubListen(struct GDBStub* stub, int port, const struct Address* bindAddress) { if (!SOCKET_FAILED(stub->socket)) { GDBStubShutdown(stub); } stub->socket = SocketOpenTCP(port, bindAddress); if (SOCKET_FAILED(stub->socket)) { mLOG(DEBUGGER, ERROR, "Couldn't open socket"); return false; } if (!SocketSetBlocking(stub->socket, false)) { goto cleanup; } int err = SocketListen(stub->socket, 1); if (err) { goto cleanup; } return true; cleanup: mLOG(DEBUGGER, ERROR, "Couldn't listen on port"); SocketClose(stub->socket); stub->socket = INVALID_SOCKET; return false; }
static bool _mPerfRunServer(const char* listen, const struct mArguments* args, const struct PerfOpts* perfOpts) { SocketSubsystemInit(); Socket server = SocketOpenTCP(7216, NULL); if (SOCKET_FAILED(server)) { SocketSubsystemDeinit(); return false; } if (SOCKET_FAILED(SocketListen(server, 0))) { SocketClose(server); SocketSubsystemDeinit(); return false; } _socket = SocketAccept(server, NULL); if (perfOpts->csv) { const char* header = "game_code,frames,duration,renderer\n"; SocketSend(_socket, header, strlen(header)); } char path[PATH_MAX]; while (SocketRecv(_socket, path, sizeof(path)) > 0) { char* nl = strchr(path, '\n'); if (nl == path) { break; } if (nl) { nl[0] = '\0'; } if (!_mPerfRunCore(path, args, perfOpts)) { break; } } SocketClose(_socket); SocketClose(server); SocketSubsystemDeinit(); return true; }