tHandle non-blocking connect errors - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit b7b017640b47d311c77eac2f0bd60e7f65286db1
(DIR) parent f6e1f6dab594b9695e0e220c8b20ad9184019283
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Wed, 11 Nov 2020 19:18:43 -0800
Handle non-blocking connect errors
Have select() detect errors on the connecting
socket, and terminate the connection in this case.
Use a generic message if none is available.
Diffstat:
M src/curses_client/curses_client.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
t@@ -562,7 +562,7 @@ void SocksAuthFunc(NetworkBuffer *netbuf, gpointer data)
static gboolean DoConnect(Player *Play, GString *errstr)
{
NetworkBuffer *netbuf;
- fd_set readfds, writefds;
+ fd_set readfds, writefds, errorfds;
int maxsock, c;
gboolean doneOK = TRUE;
NBStatus oldstatus;
t@@ -583,11 +583,12 @@ static gboolean DoConnect(Player *Play, GString *errstr)
oldsocks = netbuf->sockstat;
FD_ZERO(&readfds);
FD_ZERO(&writefds);
+ FD_ZERO(&errorfds);
FD_SET(0, &readfds);
maxsock = 1;
- SetSelectForNetworkBuffer(netbuf, &readfds, &writefds, NULL,
+ SetSelectForNetworkBuffer(netbuf, &readfds, &writefds, &errorfds,
&maxsock);
- if (bselect(maxsock, &readfds, &writefds, NULL, NULL) == -1) {
+ if (bselect(maxsock, &readfds, &writefds, &errorfds, NULL) == -1) {
if (errno == EINTR) {
CheckForResize(Play);
continue;
t@@ -603,7 +604,7 @@ static gboolean DoConnect(Player *Play, GString *errstr)
wrefresh(curscr);
#endif
}
- RespondToSelect(netbuf, &readfds, &writefds, NULL, &doneOK);
+ RespondToSelect(netbuf, &readfds, &writefds, &errorfds, &doneOK);
}
}
t@@ -665,7 +666,9 @@ static gboolean ConnectToServer(Player *Play)
server (the error message itself is displayed on the next
screen line) */
mvaddstr(top, 1, _("Could not start multiplayer dopewars"));
- text = g_strdup_printf(" (%s)", errstr->str);
+ text = g_strdup_printf(" (%s)",
+ errstr->str[0] ? errstr->str
+ : _("connection to server failed"));
mvaddstr(top + 1, 1, text);
g_free(text);
}