]> git.ozlabs.org Git - ccan-lca-2011.git/commitdiff
lca2011: add option parsing using ccan/opt.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:41:51 +0000 (14:11 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 21 Jan 2011 03:41:51 +0000 (14:11 +1030)
ccan/oserver/_info
ccan/oserver/oserver.c
ccan/oserver/oserver.h

index 85ed0bf7881684c93ee5178d6af0a2366303cb04..6879f42903aa2bcab42523c330ccb3a1ae9bae03 100644 (file)
  *     #include <sys/types.h>
  *     #include <sys/socket.h>
  *     #include <ccan/oserver/oserver.h>
+ *     #include <ccan/opt/opt.h>
  *     #include <err.h>
  *     #include <stdlib.h>
  *
- *     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;
        }
 
index b7495f307f6f552b93246d9975af2eefdd74cb27..20edfcbc19a79c846d3e2f31d834eebccd64fced 100644 (file)
@@ -1,5 +1,6 @@
 #include <ccan/oserver/oserver.h>
 #include <ccan/read_write_all/read_write_all.h>
+#include <ccan/opt/opt.h>
 #include <ccan/noerr/noerr.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -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);
index d727560cd76455d092acd3db9a6e06adbd16add7..f71f3e2881182b7d4d9848cc8ca2f0d7a05dbd19 100644 (file)
@@ -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