From: HimbeerserverDE Date: Mon, 4 Oct 2021 15:46:51 +0000 (+0200) Subject: Remove old timeout detection X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=47cb14ef11fe2f71bfbed1e9cff6e2079cbf2654;p=dragonnet.git Remove old timeout detection --- diff --git a/listen.c b/listen.c index e2dcb29..4a819a7 100644 --- 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 1329fc3..d508f74 100644 --- 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 f4a4d7d..80e5a95 100644 --- 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, diff --git a/recv_thread.c b/recv_thread.c index 47a47a8..bff48eb 100644 --- a/recv_thread.c +++ b/recv_thread.c @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -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 } }