]> git.sesse.net Git - jam/blobdiff - jam.c
Proper error handling for epoll, and some cleanup.
[jam] / jam.c
diff --git a/jam.c b/jam.c
index 4836410e5552cc643b187c73f243f6b8ece92c8c..d447debb1c723849714fd3b65356a3ca024ed0d5 100644 (file)
--- a/jam.c
+++ b/jam.c
@@ -10,6 +10,7 @@
 #include <netinet/in.h>
 #include <sys/epoll.h>
 #include <sys/ioctl.h>
+#include <errno.h>
 
 unsigned short port = 2007;
 
@@ -173,7 +174,7 @@ void generate_new_sender(int ep_fd)
        sin.sin_addr = destinations[dst_num];
 
        // non-blocking connect (will be detected by epoll later)
-       if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
+       if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1 && errno != EINPROGRESS) {
                perror("connect()");
                exit(1);
        }
@@ -219,8 +220,13 @@ void *sender_worker(void *arg)
                generate_new_sender(ep_fd);
 
        for ( ;; ) {
-               int ret = epoll_wait(ep_fd, events, num_sockets_per_sender, -1);
-               for (i = 0; i < ret; ++i) {
+               int num_active = epoll_wait(ep_fd, events, num_sockets_per_sender, -1);
+               if (num_active == -1) {
+                       perror("epoll_wait");
+                       exit(1);
+               }
+
+               for (i = 0; i < num_active; ++i) {
                        unsigned bytes_to_send = events[i].data.u64;
                        unsigned ret;
 
@@ -393,6 +399,7 @@ int main(int argc, char **argv)
 
        if (destinations == NULL || sources == NULL) {
                fprintf(stderr, "Missing or empty source or destination host list. Aborting.\n");
+               exit(1);
        }
 
        if (do_listen) {