render_node.c
changeset 8 4d38ccbeb93e
parent 6 4252c27f2b72
child 11 082bfaf38cf0
equal deleted inserted replaced
7:446c0b816b91 8:4d38ccbeb93e
     3 #include <arpa/inet.h>
     3 #include <arpa/inet.h>
     4 #include <sys/socket.h>
     4 #include <sys/socket.h>
     5 #include <stdlib.h>
     5 #include <stdlib.h>
     6 #include <signal.h>
     6 #include <signal.h>
     7 #include <string.h>
     7 #include <string.h>
       
     8 #include <unistd.h>
     8 
     9 
     9 #include "render.h"
    10 #include "render.h"
    10 #include "render_remote.h"
    11 #include "render_remote.h"
    11 #include "mandelbrot.h"
    12 #include "mandelbrot.h"
    12 #include "common.h"
    13 #include "common.h"
   113 
   114 
   114 int main (int argc, char** argv) {
   115 int main (int argc, char** argv) {
   115     int ssock, sock;
   116     int ssock, sock;
   116     struct sockaddr_in addr;
   117     struct sockaddr_in addr;
   117     socklen_t addr_len;
   118     socklen_t addr_len;
       
   119     
       
   120     // parse arguments
       
   121     int opt;
       
   122     const char *port_name = NULL;
   118 
   123 
       
   124     while ((opt = getopt(argc, argv, "l:")) != -1) {
       
   125         switch (opt) {
       
   126             case 'l':
       
   127                 if (port_name)
       
   128                     err_exit("only specify -l once");
       
   129 
       
   130                 port_name = optarg;
       
   131                 break;
       
   132 
       
   133             default:
       
   134                 err_exit("Usage: %s [-l port]", argv[0]);
       
   135         }
       
   136     }
       
   137 
       
   138     if (!port_name)
       
   139         port_name = RENDER_PORT_NAME;
       
   140 
       
   141     unsigned short port = atoi(port_name);
       
   142 
       
   143     if (!port)
       
   144         err_exit("invalid port: %s", port_name);
   119 
   145 
   120     // create the socket
   146     // create the socket
   121     if ((ssock = socket(PF_INET, SOCK_STREAM, 0)) == -1)
   147     if ((ssock = socket(PF_INET, SOCK_STREAM, 0)) == -1)
   122         perr_exit("socket");
   148         perr_exit("socket");
   123 
   149 
   124     addr.sin_family = AF_INET;
   150     addr.sin_family = AF_INET;
   125     addr.sin_port = htons(RENDER_PORT);
   151     addr.sin_port = htons(port);
   126     addr.sin_addr.s_addr = INADDR_ANY;
   152     addr.sin_addr.s_addr = INADDR_ANY;
   127 
   153 
   128     if (argc > 1)
       
   129         addr.sin_port = htons(atoi(argv[1]));
       
   130     
       
   131     if (bind(ssock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1)
   154     if (bind(ssock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1)
   132         perr_exit("bind");
   155         perr_exit("bind");
   133     
   156     
   134     if (listen(ssock, 1) == -1)
   157     if (listen(ssock, 1) == -1)
   135         perr_exit("listen");
   158         perr_exit("listen");