[PATCH] non-fatal gethostname and/or gethostbyname failures.

gethostname and/or gethostbyname failures needn't fail UDP_Init outright.
in case they fail, set myAddr to INADDR_LOOPBACK.

Signed-off-by: O.Sezer <sezero@users.sourceforge.net>
Signed-off-by: Tyrann <tyrann@disenchant.net>
This commit is contained in:
Ozkan Sezer 2009-01-11 15:24:24 +10:30 committed by Tyrann
parent f19a6650c4
commit b6d45b9e7d
2 changed files with 37 additions and 28 deletions

View File

@ -114,17 +114,23 @@ UDP_Init(void)
return -1;
/* determine my name & address */
myAddr.s_addr = htonl(INADDR_LOOPBACK);
err = gethostname(buff, MAXHOSTNAMELEN);
if (err) {
Con_Printf("%s: gethostname failed, UDP disabled (errno: %i)\n",
__func__, errno);
return -1;
Con_Printf("%s: WARNING: gethostname failed (%s)\n", __func__,
strerror(errno));
} else {
buff[MAXHOSTNAMELEN - 1] = 0;
local = gethostbyname(buff);
if (!local) {
Con_Printf("%s: WARNING: gethostbyname failed (%s)\n", __func__,
hstrerror(h_errno));
} else if (local->h_addrtype != AF_INET) {
Con_Printf("%s: address from gethostbyname not IPv4\n", __func__);
} else {
myAddr = *(struct in_addr *)local->h_addr_list[0];
}
}
buff[MAXHOSTNAMELEN - 1] = 0;
local = gethostbyname(buff);
if (!local || local->h_addrtype != AF_INET)
return -1;
myAddr = *(struct in_addr *)local->h_addr_list[0];
i = COM_CheckParm("-ip");
if (i && i < com_argc - 1) {
@ -156,11 +162,15 @@ UDP_Init(void)
return -1;
}
/* myAddr may resolve to 127.0.0.1, see if we can do any better */
memset (ifname, 0, sizeof(ifname));
if (bindAddr.s_addr == INADDR_NONE && localAddr.s_addr == INADDR_NONE) {
/* myAddr may resolve to 127.0.0.1, see if we can do any better */
if (myAddr.s_addr == htonl(INADDR_LOOPBACK)) {
if (udp_scan_iface(net_controlsocket) == 0)
Con_Printf ("Local address: %s (%s)\n", inet_ntoa(myAddr), ifname);
Con_Printf ("UDP, Local address: %s (%s)\n", inet_ntoa(myAddr),
ifname);
}
if (ifname[0] == 0) {
Con_Printf ("UDP, Local address: %s\n", inet_ntoa(myAddr));
}
broadcastaddr.sin_family = AF_INET;

View File

@ -102,26 +102,25 @@ WINS_Init(void)
winsock_initialized++;
/* determine my name & address */
myAddr.s_addr = htonl(INADDR_LOOPBACK);
err = gethostname(buff, MAXHOSTNAMELEN);
if (err) {
Con_Printf("%s: gethostname failed, UDP disabled.\n", __func__);
if (--winsock_initialized == 0)
WSACleanup();
return -1;
Con_Printf("%s: WARNING: gethostname failed.\n", __func__);
} else {
buff[MAXHOSTNAMELEN - 1] = 0;
blocktime = Sys_DoubleTime();
WSASetBlockingHook(BlockingHook);
local = gethostbyname(buff);
WSAUnhookBlockingHook();
if (!local) {
Con_Printf("%s: WARNING: gethostbyname timed out.\n", __func__);
} else if (local->h_addrtype != AF_INET) {
Con_Printf("%s: address from gethostbyname not IPv4\n", __func__);
} else {
myAddr = *(struct in_addr *)local->h_addr_list[0];
}
}
buff[MAXHOSTNAMELEN - 1] = 0;
blocktime = Sys_DoubleTime();
WSASetBlockingHook(BlockingHook);
local = gethostbyname(buff);
WSAUnhookBlockingHook();
if (!local) {
Con_Printf("%s: gethostbyname timed out, UDP disabled.\n", __func__);
if (--winsock_initialized == 0)
WSACleanup();
return -1;
}
myAddr = *(struct in_addr *)local->h_addr_list[0];
Con_Printf ("UDP, Local address: %s\n", inet_ntoa(myAddr));
i = COM_CheckParm("-ip");
if (i && i < com_argc - 1) {