From: Rusty Russell Date: Fri, 21 Jan 2011 03:41:51 +0000 (+1030) Subject: lca2011: add option parsing using ccan/opt. X-Git-Url: http://git.ozlabs.org/?p=ccan-lca-2011.git;a=commitdiff_plain;h=6dc5af4494849dec8639c57c591c0dcc9bbd7173 lca2011: add option parsing using ccan/opt. --- diff --git a/ccan/oserver/_info b/ccan/oserver/_info index 85ed0bf..6879f42 100644 --- a/ccan/oserver/_info +++ b/ccan/oserver/_info @@ -12,14 +12,25 @@ * #include * #include * #include + * #include * #include * #include * - * int main(void) + * int main(int argc, char *argv[]) * { * int fd, sockfd; + * unsigned int port = OSERVER_PORT; * - * sockfd = oserver_setup(); + * opt_register_noarg("--help|--usage|-h", opt_usage_and_exit, + * "\nA oserver program", "Usage information"); + * opt_register_arg("--port", opt_set_uintval, opt_show_uintval, + * &port, "Server port number"); + * + * opt_parse(&argc, argv, opt_log_stderr_exit); + * if (argc != 1) + * opt_log_stderr_exit("Unknown extra arguments"); + * + * sockfd = oserver_setup(port); * if (sockfd < 0) * err(1, "Failed to set up server socket"); * @@ -44,6 +55,7 @@ int main(int argc, char *argv[]) printf("ccan/foreach\n"); printf("ccan/noerr\n"); printf("ccan/failtest\n"); + printf("ccan/opt\n"); return 0; } diff --git a/ccan/oserver/oserver.c b/ccan/oserver/oserver.c index b7495f3..20edfcb 100644 --- a/ccan/oserver/oserver.c +++ b/ccan/oserver/oserver.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -37,7 +38,7 @@ bool oserver_serve(int fd) return true; } -int oserver_setup(void) +int oserver_setup(unsigned short port) { int sockfd; int one = 1; @@ -54,7 +55,7 @@ int oserver_setup(void) warn("Setting socket reuse"); u.in.sin_family = AF_INET; - u.in.sin_port = htons(OSERVER_PORT); + u.in.sin_port = htons(port); u.in.sin_addr.s_addr = INADDR_ANY; if (bind(sockfd, &u.addr, sizeof(u.in)) == -1) { close_noerr(sockfd); diff --git a/ccan/oserver/oserver.h b/ccan/oserver/oserver.h index d727560..f71f3e2 100644 --- a/ccan/oserver/oserver.h +++ b/ccan/oserver/oserver.h @@ -4,18 +4,18 @@ /** * oserver_setup - get a listening filedescriptor for an oserver - * - * Opens a socket and binds it to OSERVER_PORT, then sets it up to listen + * @port: port to use (usually OSERVER_PORT) + * Opens a socket and binds it to @port, then sets it up to listen * for connections and returns it. * * Example: * int serverfd; * - * serverfd = oserver_setup(); + * serverfd = oserver_setup(OSERVER_PORT); * if (serverfd < 0) * err(1, "Failed to set up server"); */ -int oserver_setup(void); +int oserver_setup(unsigned short port); /** * oserver_serve - serve an oserver client via a file descriptor