X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fnet%2Fnet.c;h=11c6b670aa456809f528c0eb6d905d2cb3c0b5bb;hb=f7ead5da96bfb5ce3ebffe11256bbcb5f4b4f750;hp=61efd5b8fd4b55643b157d3cf90e73818b2a20f4;hpb=188ec2fac47289c7b543e9307d61af7fbccde0f5;p=ccan diff --git a/ccan/net/net.c b/ccan/net/net.c index 61efd5b8..11c6b670 100644 --- a/ccan/net/net.c +++ b/ccan/net/net.c @@ -231,14 +231,16 @@ static bool should_listen(const struct addrinfo *addrinfo) static int make_listen_fd(const struct addrinfo *addrinfo) { - int saved_errno, fd, on = 1; + int fd, on = 1; fd = socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol); if (fd < 0) return -1; - setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) + goto fail; + if (bind(fd, addrinfo->ai_addr, addrinfo->ai_addrlen) != 0) goto fail; @@ -247,9 +249,7 @@ static int make_listen_fd(const struct addrinfo *addrinfo) return fd; fail: - saved_errno = errno; - close(fd); - errno = saved_errno; + close_noerr(fd); return -1; }