From edb8f861bd0648c3e75573013f1cd68cf63dd5e5 Mon Sep 17 00:00:00 2001 From: angt Date: Sun, 31 Jan 2016 08:45:39 +0100 Subject: [PATCH] Set O_NONBLOCK --- mud.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mud.c b/mud.c index e7e9949..b0bd902 100644 --- a/mud.c +++ b/mud.c @@ -5,6 +5,7 @@ #include #include #include +#include #include struct path { @@ -25,6 +26,17 @@ struct mud { struct path *path; }; +static +int mud_set_nonblock (int fd) +{ + int flags = fcntl(fd, F_GETFL, 0); + + if (flags==-1) + flags = 0; + + return fcntl(fd, F_SETFL, flags|O_NONBLOCK); +} + static struct addrinfo *mud_addrinfo (const char *host, const char *port, int flags) { @@ -186,6 +198,9 @@ int mud_bind (struct mud *mud, const char *host, const char *port) if (fd==-1) continue; + if (mud_set_nonblock(fd)) + continue; + if (!bind(fd, (struct sockaddr *)p->ai_addr, p->ai_addrlen)) { mud_new_sock(mud, fd, p->ai_family); break;