* 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)
printf("ccan/read_write_all\n");
printf("ccan/str\n");
printf("ccan/foreach\n");
+ printf("ccan/noerr\n");
return 0;
}
#include <ccan/oserver/oserver.h>
#include <ccan/read_write_all/read_write_all.h>
+#include <ccan/noerr/noerr.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
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");
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;
}