diff -r 446c0b816b91 -r 4d38ccbeb93e render_node.c --- a/render_node.c Thu Jun 05 23:04:28 2008 +0300 +++ b/render_node.c Fri Jun 06 03:24:22 2008 +0300 @@ -5,6 +5,7 @@ #include #include #include +#include #include "render.h" #include "render_remote.h" @@ -115,19 +116,41 @@ int ssock, sock; struct sockaddr_in addr; socklen_t addr_len; + + // parse arguments + int opt; + const char *port_name = NULL; + while ((opt = getopt(argc, argv, "l:")) != -1) { + switch (opt) { + case 'l': + if (port_name) + err_exit("only specify -l once"); + + port_name = optarg; + break; + + default: + err_exit("Usage: %s [-l port]", argv[0]); + } + } + + if (!port_name) + port_name = RENDER_PORT_NAME; + + unsigned short port = atoi(port_name); + + if (!port) + err_exit("invalid port: %s", port_name); // create the socket if ((ssock = socket(PF_INET, SOCK_STREAM, 0)) == -1) perr_exit("socket"); addr.sin_family = AF_INET; - addr.sin_port = htons(RENDER_PORT); + addr.sin_port = htons(port); addr.sin_addr.s_addr = INADDR_ANY; - if (argc > 1) - addr.sin_port = htons(atoi(argv[1])); - if (bind(ssock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1) perr_exit("bind");