qboolean NET_OpenSocket(struct qw_connection *qwc, enum netsrc socknum, enum netaddrtype type) { if (qwc->netdata->sockets[socknum]) Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[socknum]); qwc->netdata->sockets[socknum] = Sys_Net_CreateSocket(qwc->netdata->sysnetdata, type); if (qwc->netdata->sockets[socknum]) return true; return false; }
void NET_ServerConfig (struct qw_connection *qwc, qboolean enable) { int i, port; if (enable) { if (qwc->netdata->sockets[NS_SERVER] == 0) { #warning Command line arguments are baaaaaad. /* port = 0; i = COM_CheckParm ("-port"); if (i && i < com_argc) port = atoi(com_argv[i+1]); */ port = 27666; if (!port) port = PORT_SERVER; qwc->netdata->sockets[NS_SERVER] = Sys_Net_CreateSocket(qwc->netdata->sysnetdata, NA_IPV4); if (qwc->netdata->sockets[NS_SERVER] == 0) { Com_Printf ("WARNING: Couldn't allocate server socket.\n"); } else { if (!Sys_Net_Bind(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER], port)) { Com_Printf("WARNING: Unable to bind server socket to port.\n"); } else { return; } Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER]); qwc->netdata->sockets[NS_SERVER] = 0; } } } else { if (qwc->netdata->sockets[NS_SERVER] != 0) { Sys_Net_DeleteSocket(qwc->netdata->sysnetdata, qwc->netdata->sockets[NS_SERVER]); qwc->netdata->sockets[NS_SERVER] = 0; } } }
static void ServerScanner_Thread_OpenSockets(struct ServerScanner *serverscanner) { unsigned int i; enum netaddrtype addrtype; for(i=0;i<serverscanner->nummasterservers;i++) { addrtype = serverscanner->masterservers[i].addr.type; if (addrtype == NA_LOOPBACK) continue; if (serverscanner->sockets[addrtype] == 0) serverscanner->sockets[addrtype] = Sys_Net_CreateSocket(serverscanner->netdata, addrtype); if (serverscanner->sockets[addrtype] == 0) serverscanner->numvalidmasterservers--; } }
static void QTVR_Thread(void *arg) { struct qtvr *qtvr; int r; char buf[128]; struct netaddr serveraddr; struct netaddr addr; struct SysNetData *netdata; struct SysSocket *socket; qtvr = arg; netdata = Sys_Net_Init(); if (netdata == NULL) { Com_Printf("QTVR_Thread: Sys_Net_Init failed.\n"); } else { if (!NET_StringToAdr(netdata, qtvr->server, &serveraddr)) { Com_Printf("QTVR_Thread: Unable to parse/resolve hoststring.\n"); } else { socket = Sys_Net_CreateSocket(netdata, serveraddr.type); if (socket == NULL) { Com_Printf("QTVR_Create: could not create socket.\n"); } else { Sys_Net_Send(netdata, socket, qtvr->request, strlen(qtvr->request), &serveraddr); while (!qtvr->quit) { Sys_Net_Wait(netdata, socket, 50000); if ((r = Sys_Net_Receive(netdata, socket, buf, sizeof(buf) - 1, &addr)) > 0) { buf[r] = 0; Sys_Thread_LockMutex(qtvr->mutex); qtvr->retval = strdup(buf); if (qtvr->retval == NULL) qtvr->status = QTVR_ERROR; else qtvr->status = QTVR_REPLY_RECIEVED; Sys_Thread_UnlockMutex(qtvr->mutex); break; } } Sys_Net_DeleteSocket(netdata, socket); } } Sys_Net_Shutdown(netdata); } if (qtvr->status != QTVR_REPLY_RECIEVED) qtvr->status = QTVR_ERROR; }