test-socket-signal: properly handle receive error in receiver
authorRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Thu, 11 Nov 2010 15:33:43 +0000 (17:33 +0200)
committerRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Thu, 11 Nov 2010 15:33:43 +0000 (17:33 +0200)
Utils/test-socket-signal/receiver.c

index d744a49..d519b7f 100644 (file)
@@ -109,7 +109,9 @@ static ssize_t receive_buffer(int sockfd)
 
        while (nbytes < (ssize_t) PACKET_SIZE) {
                n = recv(sockfd, rcv_buf, PACKET_SIZE - nbytes, 0);
-               if (n <= 0)
+               DIE(n < 0, "recv");
+
+               if (n == 0)
                        break;
                nbytes += n;
        }
@@ -218,10 +220,13 @@ int main(int argc, char **argv)
 
        parse_args(argc, argv);
 
+       init();
+
        listenfd = tcp_listen_connections(cmd_args.listen_port,
                        DEFAULT_SERVER_BACKLOG);
        DIE(listenfd < 0, "tcp_listen_connections");
 
+new_connection:
        sockfd = accept(listenfd, (SSA *) &addr, &addrlen);
        DIE(sockfd < 0, "accept");
 
@@ -230,8 +235,10 @@ int main(int argc, char **argv)
 
                nbytes = receive_buffer(sockfd);
                DIE(nbytes < 0, "receive_buffer");
-               if (nbytes == 0)
-                       break;
+               if (nbytes == 0) {
+                       printf("Connection closed.\n");
+                       goto new_connection;
+               }
 
                print_buffer_meta(rcv_buf, PACKET_SIZE);
        }
@@ -239,5 +246,7 @@ int main(int argc, char **argv)
        close(sockfd);
        close(listenfd);
 
+       cleanup();
+
        return 0;
 }