mirror of
https://github.com/libretro/libretro-tyrquake.git
synced 2025-04-01 10:11:49 +00:00
[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:
parent
f19a6650c4
commit
b6d45b9e7d
32
NQ/net_udp.c
32
NQ/net_udp.c
@ -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;
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user