From 994f0e61c9b619b99a652569738215b1090a6343 Mon Sep 17 00:00:00 2001 From: angt Date: Mon, 7 Mar 2016 14:53:32 +0000 Subject: [PATCH] Code cleanup --- mud.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/mud.c b/mud.c index d058560..b4ddb5f 100644 --- a/mud.c +++ b/mud.c @@ -450,21 +450,15 @@ int mud_set_key (struct mud *mud, unsigned char *key, size_t size) return 0; } -struct mud *mud_create (const char *port) +static +int mud_create_socket (const char *port) { - struct mud *mud = calloc(1, sizeof(struct mud)); - - if (!mud) - return NULL; - - mud->fd = -1; - struct addrinfo *p, *ai = mud_addrinfo(NULL, port, AI_PASSIVE|AI_NUMERICSERV); - if (!ai) { - mud_delete(mud); - return NULL; - } + if (!ai) + return -1; + + int fd = -1; for (p = ai; p; p = p->ai_next) { if (p->ai_family != AF_INET6) @@ -473,7 +467,7 @@ struct mud *mud_create (const char *port) if (!p->ai_addr) continue; - int fd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + fd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); if (fd == -1) continue; @@ -485,15 +479,27 @@ struct mud *mud_create (const char *port) mud_set_nonblock(fd) || bind(fd, p->ai_addr, p->ai_addrlen)) { close(fd); + fd = -1; continue; } - mud->fd = fd; break; } freeaddrinfo(ai); + return fd; +} + +struct mud *mud_create (const char *port) +{ + struct mud *mud = calloc(1, sizeof(struct mud)); + + if (!mud) + return NULL; + + mud->fd = mud_create_socket(port); + if (mud->fd == -1) { mud_delete(mud); return NULL;