]> git.lizzy.rs Git - dragonnet.git/commitdiff
Remove old timeout detection
authorHimbeerserverDE <himbeerserverde@gmail.com>
Mon, 4 Oct 2021 15:46:51 +0000 (17:46 +0200)
committerHimbeerserverDE <himbeerserverde@gmail.com>
Mon, 4 Oct 2021 15:46:51 +0000 (17:46 +0200)
listen.c
peer.c
peer.h
recv_thread.c

index e2dcb29f74611b7e173e94bf02a9ba330c190ca1..4a819a791e8e37197ad1612ab2231bb4d6b13eb5 100644 (file)
--- a/listen.c
+++ b/listen.c
@@ -21,18 +21,6 @@ static bool dragonnet_peer_init_accepted(DragonnetPeer *p, int sock,
        p->laddr = l->laddr;
        p->raddr = dragonnet_addr_parse_sock(addr);
 
-       if (setsockopt(p->sock, SOL_SOCKET, SO_RCVTIMEO, &dragonnet_timeout,
-                       sizeof dragonnet_timeout) < 0) {
-               perror("setsockopt");
-               return false;
-       }
-
-       if (setsockopt(p->sock, SOL_SOCKET, SO_SNDTIMEO, &dragonnet_timeout,
-                       sizeof dragonnet_timeout) < 0) {
-               perror("setsockopt");
-               return false;
-       }
-
        pthread_rwlock_unlock(&p->mu);
        return true;
 }
diff --git a/peer.c b/peer.c
index 1329fc3488fe521640a0f7f3549c952eda095895..d508f740866f04f605ba727bfd7095c56e615b38 100644 (file)
--- a/peer.c
+++ b/peer.c
@@ -6,11 +6,6 @@
 #include "peer.h"
 #include "recv_thread.h"
 
-const struct timeval dragonnet_timeout = {
-       .tv_sec = 30,
-       .tv_usec = 0
-};
-
 static bool dragonnet_peer_init(DragonnetPeer *p, char *addr)
 {
        pthread_rwlock_init(&p->mu, NULL);
@@ -19,18 +14,6 @@ static bool dragonnet_peer_init(DragonnetPeer *p, char *addr)
        p->sock = socket(AF_INET6, SOCK_STREAM, 0);
        p->raddr = dragonnet_addr_parse_str(addr);
 
-       if (setsockopt(p->sock, SOL_SOCKET, SO_RCVTIMEO, &dragonnet_timeout,
-                       sizeof dragonnet_timeout) < 0) {
-               perror("setsockopt");
-               return false;
-       }
-
-       if (setsockopt(p->sock, SOL_SOCKET, SO_SNDTIMEO, &dragonnet_timeout,
-                       sizeof dragonnet_timeout) < 0) {
-               perror("setsockopt");
-               return false;
-       }
-
        struct sockaddr_in6 sock_addr = dragonnet_addr_sock(p->raddr);
        if (connect(p->sock, (const struct sockaddr *) &sock_addr,
                        sizeof sock_addr) < 0) {
diff --git a/peer.h b/peer.h
index f4a4d7d89b50786e0c6e07a133d562c864d9d963..80e5a9518a294546eab64928824df60349053447 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -5,8 +5,6 @@
 
 #include "addr.h"
 
-extern const struct timeval dragonnet_timeout;
-
 typedef enum {
        DRAGONNET_PEER_CREATED,
        DRAGONNET_PEER_ACTIVE,
index 47a47a833c4ecf39ae7183e56af147ac5265811d..bff48ebb8b6443cd7867db987173137c1f6f8486 100644 (file)
@@ -1,6 +1,5 @@
 #include <assert.h>
 #include <dragontype/number.h>
-#include <errno.h>
 #include <pthread.h>
 #include <stdbool.h>
 #include <stdio.h>
@@ -21,28 +20,31 @@ void *dragonnet_peer_recv_thread(void *g_peer)
        while (true) {
                u16 msg;
 
+               // Copy socket fd so that shutdown doesn't block
                pthread_rwlock_rdlock(&p->mu);
-               ssize_t len = recv(p->sock, &msg, sizeof msg, MSG_WAITALL);
+               int sock = p->sock;
                pthread_rwlock_unlock(&p->mu);
 
-               if (len < 0 && errno != EWOULDBLOCK) {
+               ssize_t len = recv(sock, &msg, sizeof msg, MSG_WAITALL);
+
+               if (len < 0) {
                        perror("recv");
                        dragonnet_peer_delete(p);
                        return NULL;
                }
 
-               // connection closed
-               if ((len >= 0 && len != sizeof msg) || errno == EWOULDBLOCK) {
+               // Connection closed
+               if (len == 0) {
                        pthread_rwlock_wrlock(&p->mu);
 
                        close(p->sock);
-                       p->sock = 0;
+                       p->sock = -1;
                        p->state++;
 
                        pthread_rwlock_unlock(&p->mu);
                        return NULL;
                }
 
-               // deserialization
+               // Deserialization
        }
 }