--- 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 <stdlib.h>
#include <signal.h>
#include <string.h>
+#include <unistd.h>
#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");