diff --git a/Quake/net_udp.c b/Quake/net_udp.c index 860a8fae..82d77c56 100644 --- a/Quake/net_udp.c +++ b/Quake/net_udp.c @@ -38,6 +38,7 @@ static in_addr_t myAddr; sys_socket_t UDP_Init (void) { + int err; char *colon; char buff[MAXHOSTNAMELEN]; struct hostent *local; @@ -50,7 +51,9 @@ sys_socket_t UDP_Init (void) myAddr = htonl(INADDR_LOOPBACK); if (gethostname(buff, MAXHOSTNAMELEN) != 0) { - Con_SafePrintf("UDP_Init: WARNING: gethostname failed\n"); + err = SOCKETERRNO; + Con_SafePrintf("UDP_Init: gethostname failed (%s)\n", + socketerror(err)); } else { @@ -58,7 +61,8 @@ sys_socket_t UDP_Init (void) local = gethostbyname(buff); if (local == NULL) { - Con_SafePrintf("UDP_Init: WARNING: gethostbyname failed\n"); + Con_SafePrintf("UDP_Init: gethostbyname failed (%s)\n", + hstrerror(h_errno)); } else { @@ -124,9 +128,14 @@ sys_socket_t UDP_OpenSocket (int port) sys_socket_t newsocket; struct sockaddr_in address; int _true = 1; + int err; if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) + { + err = SOCKETERRNO; + Con_SafePrintf("UDP_OpenSocket: %s\n", socketerror(err)); return INVALID_SOCKET; + } if (ioctlsocket (newsocket, FIONBIO, &_true) == SOCKET_ERROR) goto ErrorReturn; @@ -139,6 +148,8 @@ sys_socket_t UDP_OpenSocket (int port) return newsocket; ErrorReturn: + err = SOCKETERRNO; + Con_SafePrintf("UDP_OpenSocket: %s\n", socketerror(err)); UDP_CloseSocket (newsocket); return INVALID_SOCKET; } @@ -228,7 +239,8 @@ sys_socket_t UDP_CheckNewConnections (void) if (ioctl (net_acceptsocket, FIONREAD, &available) == -1) { - Sys_Error ("UDP: ioctlsocket (FIONREAD) failed"); + int err = SOCKETERRNO; + Sys_Error ("UDP: ioctlsocket (FIONREAD) failed (%s)", socketerror(err)); } if (available) return net_acceptsocket; @@ -250,6 +262,7 @@ int UDP_Read (sys_socket_t socketid, byte *buf, int len, struct qsockaddr *addr) int err = SOCKETERRNO; if (err == EWOULDBLOCK || err == ECONNREFUSED) return 0; + Con_SafePrintf ("UDP_Read, recvfrom: %s\n", socketerror(err)); } return ret; } @@ -264,6 +277,8 @@ static int UDP_MakeSocketBroadcastCapable (sys_socket_t socketid) if (setsockopt(socketid, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == SOCKET_ERROR) { + int err = SOCKETERRNO; + Con_SafePrintf ("UDP, setsockopt: %s\n", socketerror(err)); return -1; } net_broadcastsocket = socketid; @@ -305,6 +320,7 @@ int UDP_Write (sys_socket_t socketid, byte *buf, int len, struct qsockaddr *addr int err = SOCKETERRNO; if (err == EWOULDBLOCK) return 0; + Con_SafePrintf ("UDP_Write, sendto: %s\n", socketerror(err)); } return ret; } @@ -376,7 +392,7 @@ int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name) //============================================================================= -int UDP_GetAddrFromName(char *name, struct qsockaddr *addr) +int UDP_GetAddrFromName (char *name, struct qsockaddr *addr) { struct hostent *hostentry; diff --git a/Quake/net_wins.c b/Quake/net_wins.c index cfe5f49a..fa600de3 100644 --- a/Quake/net_wins.c +++ b/Quake/net_wins.c @@ -37,6 +37,8 @@ static in_addr_t myAddr; int winsock_initialized = 0; WSADATA winsockdata; +#define __wsaerr_static /* not static: used by net_wipx.c too */ +#include "wsaerror.h" //============================================================================= @@ -73,20 +75,31 @@ static void WINS_GetLocalAddress (void) struct hostent *local = NULL; char buff[MAXHOSTNAMELEN]; in_addr_t addr; + int err; if (myAddr != INADDR_ANY) return; if (gethostname(buff, MAXHOSTNAMELEN) == SOCKET_ERROR) + { + err = SOCKETERRNO; + Con_SafePrintf("WINS_GetLocalAddress: gethostname failed (%s)\n", + socketerror(err)); return; + } buff[MAXHOSTNAMELEN - 1] = 0; blocktime = Sys_FloatTime(); WSASetBlockingHook(BlockingHook); local = gethostbyname(buff); + err = WSAGetLastError(); WSAUnhookBlockingHook(); if (local == NULL) + { + Con_SafePrintf("WINS_GetLocalAddress: gethostbyname failed (%s)\n", + __WSAE_StrError(err)); return; + } myAddr = *(in_addr_t *)local->h_addr_list[0]; @@ -108,7 +121,8 @@ sys_socket_t WINS_Init (void) err = WSAStartup(MAKEWORD(1,1), &winsockdata); if (err != 0) { - Con_SafePrintf ("Winsock initialization failed.\n"); + Con_SafePrintf("Winsock initialization failed (%s)\n", + socketerror(err)); return INVALID_SOCKET; } } @@ -117,7 +131,9 @@ sys_socket_t WINS_Init (void) // determine my name & address if (gethostname(buff, MAXHOSTNAMELEN) != 0) { - Con_SafePrintf("WINS_Init: WARNING: gethostname failed\n"); + err = SOCKETERRNO; + Con_SafePrintf("WINS_Init: gethostname failed (%s)\n", + socketerror(err)); } else { @@ -201,9 +217,14 @@ sys_socket_t WINS_OpenSocket (int port) sys_socket_t newsocket; struct sockaddr_in address; u_long _true = 1; + int err; if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == INVALID_SOCKET) + { + err = SOCKETERRNO; + Con_SafePrintf("WINS_OpenSocket: %s\n", socketerror(err)); return INVALID_SOCKET; + } if (ioctlsocket (newsocket, FIONBIO, &_true) == SOCKET_ERROR) goto ErrorReturn; @@ -217,11 +238,17 @@ sys_socket_t WINS_OpenSocket (int port) if (tcpipAvailable) { - Sys_Error ("Unable to bind to %s", WINS_AddrToString((struct qsockaddr *)&address)); + err = SOCKETERRNO; + Sys_Error ("Unable to bind to %s (%s)", + WINS_AddrToString ((struct qsockaddr *) &address), + socketerror(err)); + return INVALID_SOCKET; /* not reached */ } /* else: we are still in init phase, no need to error */ ErrorReturn: + err = SOCKETERRNO; + Con_SafePrintf("WINS_OpenSocket: %s\n", socketerror(err)); closesocket (newsocket); return INVALID_SOCKET; } @@ -328,6 +355,7 @@ int WINS_Read (sys_socket_t socketid, byte *buf, int len, struct qsockaddr *addr int err = SOCKETERRNO; if (err == EWOULDBLOCK || err == ECONNREFUSED) return 0; + Con_SafePrintf ("WINS_Read, recvfrom: %s\n", socketerror(err)); } return ret; } @@ -342,6 +370,8 @@ static int WINS_MakeSocketBroadcastCapable (sys_socket_t socketid) if (setsockopt(socketid, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == SOCKET_ERROR) { + int err = SOCKETERRNO; + Con_SafePrintf ("UDP, setsockopt: %s\n", socketerror(err)); return -1; } net_broadcastsocket = socketid; @@ -384,6 +414,7 @@ int WINS_Write (sys_socket_t socketid, byte *buf, int len, struct qsockaddr *add int err = SOCKETERRNO; if (err == EWOULDBLOCK) return 0; + Con_SafePrintf ("WINS_Write, sendto: %s\n", socketerror(err)); } return ret; } diff --git a/Quake/net_wipx.c b/Quake/net_wipx.c index 2c2be595..e7f494b2 100644 --- a/Quake/net_wipx.c +++ b/Quake/net_wipx.c @@ -37,6 +37,7 @@ static struct sockaddr_ipx broadcastaddr; /* externs from net_wins.c: */ extern qboolean winsock_initialized; extern WSADATA winsockdata; +extern const char *__WSAE_StrError (int); #define IPXSOCKETS 18 static sys_socket_t ipxsocket[IPXSOCKETS]; @@ -59,7 +60,8 @@ sys_socket_t WIPX_Init (void) err = WSAStartup(MAKEWORD(1,1), &winsockdata); if (err != 0) { - Con_SafePrintf("Winsock initialization failed.\n"); + Con_SafePrintf("Winsock initialization failed (%s)\n", + socketerror(err)); return INVALID_SOCKET; } } @@ -71,7 +73,9 @@ sys_socket_t WIPX_Init (void) // determine my name & address if (gethostname(buff, MAXHOSTNAMELEN) != 0) { - Con_SafePrintf("WIPX_Init: WARNING: gethostname failed\n"); + err = SOCKETERRNO; + Con_SafePrintf("WIPX_Init: gethostname failed (%s)\n", + socketerror(err)); } else { @@ -138,6 +142,7 @@ void WIPX_Listen (qboolean state) sys_socket_t WIPX_OpenSocket (int port) { + int err; sys_socket_t handle, newsocket; struct sockaddr_ipx address; u_long _true = 1; @@ -149,11 +154,14 @@ sys_socket_t WIPX_OpenSocket (int port) } if (handle == IPXSOCKETS) { + Con_SafePrintf("WIPX_OpenSocket: Out of free IPX handles.\n"); return INVALID_SOCKET; } if ((newsocket = socket (AF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == INVALID_SOCKET) { + err = SOCKETERRNO; + Con_SafePrintf("WIPX_OpenSocket: %s\n", socketerror(err)); return INVALID_SOCKET; } @@ -177,12 +185,15 @@ sys_socket_t WIPX_OpenSocket (int port) if (ipxAvailable) { - Sys_Error ("IPX bind failed"); + err = SOCKETERRNO; + Sys_Error ("IPX bind failed (%s)", socketerror(err)); return INVALID_SOCKET; /* not reached */ } /* else: we are still in init phase, no need to error */ ErrorReturn: + err = SOCKETERRNO; + Con_SafePrintf("WIPX_OpenSocket: %s\n", socketerror(err)); closesocket (newsocket); return INVALID_SOCKET; } @@ -217,7 +228,8 @@ sys_socket_t WIPX_CheckNewConnections (void) if (ioctlsocket (ipxsocket[net_acceptsocket], FIONREAD, &available) == SOCKET_ERROR) { - Sys_Error ("WIPX: ioctlsocket (FIONREAD) failed"); + int err = SOCKETERRNO; + Sys_Error ("WIPX: ioctlsocket (FIONREAD) failed (%s)", socketerror(err)); } if (available) return net_acceptsocket; @@ -240,6 +252,7 @@ int WIPX_Read (sys_socket_t handle, byte *buf, int len, struct qsockaddr *addr) int err = SOCKETERRNO; if (err == EWOULDBLOCK || err == ECONNREFUSED) return 0; + Con_SafePrintf ("WIPX_Read, recvfrom: %s\n", socketerror(err)); } if (ret < 4) @@ -278,6 +291,7 @@ int WIPX_Write (sys_socket_t handle, byte *buf, int len, struct qsockaddr *addr) int err = SOCKETERRNO; if (err == EWOULDBLOCK) return 0; + Con_SafePrintf ("WIPX_Write, sendto: %s\n", socketerror(err)); } return ret; @@ -352,9 +366,9 @@ int WIPX_GetSocketAddr (sys_socket_t handle, struct qsockaddr *addr) Q_memset(addr, 0, sizeof(struct qsockaddr)); if (getsockname(socketid, (struct sockaddr *)addr, &addrlen) != 0) { - int err; - err = SOCKETERRNO; + int err = SOCKETERRNO; /* FIXME: what action should be taken?... */ + Con_SafePrintf ("WIPX, getsockname: %s\n", socketerror(err)); } return 0; @@ -370,7 +384,7 @@ int WIPX_GetNameFromAddr (struct qsockaddr *addr, char *name) //============================================================================= -int WIPX_GetAddrFromName(char *name, struct qsockaddr *addr) +int WIPX_GetAddrFromName (char *name, struct qsockaddr *addr) { int n; char buf[32];