Revert "Merge branch 'mserv-is-dumb-and-what-else-is-new' into 'master'"

This reverts merge request !688
This commit is contained in:
Alam Ed Arias 2020-01-17 01:42:40 +00:00
parent 098e41e518
commit 1f77551162

View file

@ -323,7 +323,7 @@ static INT32 GetServersList(void)
// //
// MS_Connect() // MS_Connect()
// //
static INT32 MS_SubConnect(const char *ip_addr, const char *str_port, INT32 async, struct sockaddr *bindaddr, socklen_t bindaddrlen) static INT32 MS_Connect(const char *ip_addr, const char *str_port, INT32 async)
{ {
#ifdef NONET #ifdef NONET
(void)ip_addr; (void)ip_addr;
@ -356,48 +356,44 @@ static INT32 MS_SubConnect(const char *ip_addr, const char *str_port, INT32 asyn
socket_fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol); socket_fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol);
if (socket_fd != (SOCKET_TYPE)ERRSOCKET) if (socket_fd != (SOCKET_TYPE)ERRSOCKET)
{ {
if (!bindaddr || bind(socket_fd, bindaddr, bindaddrlen) == 0) if (async) // do asynchronous connection
{ {
if (async) // do asynchronous connection
{
#ifdef FIONBIO #ifdef FIONBIO
#ifdef WATTCP #ifdef WATTCP
char res = 1; char res = 1;
#else #else
unsigned long res = 1; unsigned long res = 1;
#endif #endif
ioctl(socket_fd, FIONBIO, &res); ioctl(socket_fd, FIONBIO, &res);
#endif #endif
if (connect(socket_fd, runp->ai_addr, (socklen_t)runp->ai_addrlen) == ERRSOCKET) if (connect(socket_fd, runp->ai_addr, (socklen_t)runp->ai_addrlen) == ERRSOCKET)
{
#ifdef _WIN32 // humm, on win32/win64 it doesn't work with EINPROGRESS (stupid windows)
if (WSAGetLastError() != WSAEWOULDBLOCK)
#else
if (errno != EINPROGRESS)
#endif
{
con_state = MSCS_FAILED;
CloseConnection();
I_freeaddrinfo(ai);
return MS_CONNECT_ERROR;
}
}
con_state = MSCS_WAITING;
FD_ZERO(&wset);
FD_SET(socket_fd, &wset);
select_timeout.tv_sec = 0, select_timeout.tv_usec = 0;
I_freeaddrinfo(ai);
return 0;
}
else if (connect(socket_fd, runp->ai_addr, (socklen_t)runp->ai_addrlen) != ERRSOCKET)
{ {
I_freeaddrinfo(ai); #ifdef _WIN32 // humm, on win32/win64 it doesn't work with EINPROGRESS (stupid windows)
return 0; if (WSAGetLastError() != WSAEWOULDBLOCK)
#else
if (errno != EINPROGRESS)
#endif
{
con_state = MSCS_FAILED;
CloseConnection();
I_freeaddrinfo(ai);
return MS_CONNECT_ERROR;
}
} }
con_state = MSCS_WAITING;
FD_ZERO(&wset);
FD_SET(socket_fd, &wset);
select_timeout.tv_sec = 0, select_timeout.tv_usec = 0;
I_freeaddrinfo(ai);
return 0;
}
else if (connect(socket_fd, runp->ai_addr, (socklen_t)runp->ai_addrlen) != ERRSOCKET)
{
I_freeaddrinfo(ai);
return 0;
} }
close(socket_fd);
} }
runp = runp->ai_next; runp = runp->ai_next;
} }
@ -406,45 +402,6 @@ static INT32 MS_SubConnect(const char *ip_addr, const char *str_port, INT32 asyn
return MS_CONNECT_ERROR; return MS_CONNECT_ERROR;
} }
static INT32 MS_Connect(const char *ip_addr, const char *str_port, INT32 async)
{
const char *lhost;
struct my_addrinfo hints;
struct my_addrinfo *ai, *aip;
int c;
if (M_CheckParm("-bindaddr") && ( lhost = M_GetNextParm() ))
{
memset (&hints, 0x00, sizeof(hints));
#ifdef AI_ADDRCONFIG
hints.ai_flags = AI_ADDRCONFIG;
#endif
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
if (( c = I_getaddrinfo(lhost, 0, &hints, &ai) ) != 0)
{
CONS_Printf(
"mserv.c: bind to %s: %s\n",
lhost,
gai_strerror(c));
return MS_GETHOSTBYNAME_ERROR;
}
for (aip = ai; aip; aip = aip->ai_next)
{
c = MS_SubConnect(ip_addr, str_port, async, aip->ai_addr, aip->ai_addrlen);
if (c == 0)
{
I_freeaddrinfo(ai);
return 0;
}
}
I_freeaddrinfo(ai);
return c;
}
else
return MS_SubConnect(ip_addr, str_port, async, 0, 0);
}
#define NUM_LIST_SERVER MAXSERVERLIST #define NUM_LIST_SERVER MAXSERVERLIST
const msg_server_t *GetShortServersList(INT32 room) const msg_server_t *GetShortServersList(INT32 room)
{ {