From: Rusty Russell Date: Fri, 21 Jan 2011 03:41:16 +0000 (+1030) Subject: lca2011: simpler testing by not having oserver_setup exit. X-Git-Url: http://git.ozlabs.org/?a=commitdiff_plain;h=b0bdcd94d922a2bdbe6288b1f68efe15ed70d563;hp=0b1cb00c4391dee4d633f92c5c42c7a0d4ff4861;p=ccan-lca-2011.git lca2011: simpler testing by not having oserver_setup exit. Note the use of close_noerr here to preserve the errno. --- diff --git a/ccan/oserver/_info b/ccan/oserver/_info index b906502..a9c74fc 100644 --- a/ccan/oserver/_info +++ b/ccan/oserver/_info @@ -20,6 +20,8 @@ * int fd, sockfd; * * sockfd = oserver_setup(); + * if (sockfd < 0) + * err(1, "Failed to set up server socket"); * * fd = accept(sockfd, NULL, NULL); * if (fd < 0) @@ -40,6 +42,7 @@ int main(int argc, char *argv[]) printf("ccan/read_write_all\n"); printf("ccan/str\n"); printf("ccan/foreach\n"); + printf("ccan/noerr\n"); return 0; } diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index 5f120cb..b7495f3 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -47,7 +48,7 @@ int oserver_setup(void) sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd < 0) - err(1, "Creating TCP socket"); + return -1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) warn("Setting socket reuse"); @@ -55,10 +56,14 @@ int oserver_setup(void) u.in.sin_family = AF_INET; u.in.sin_port = htons(OSERVER_PORT); u.in.sin_addr.s_addr = INADDR_ANY; - if (bind(sockfd, &u.addr, sizeof(u.in)) == -1) - err(1, "Binding TCP socket"); + if (bind(sockfd, &u.addr, sizeof(u.in)) == -1) { + close_noerr(sockfd); + return -1; + } - if (listen(sockfd, 0) != 0) - err(1, "Listening on TCP socket"); + if (listen(sockfd, 0) != 0) { + close_noerr(sockfd); + return -1; + } return sockfd; }