]> git.lizzy.rs Git - dragonnet.git/blob - recv.c
Add full (de)serializer generator
[dragonnet.git] / recv.c
1 #include <dragonnet/recv.h>
2
3 void recv_raw(DragonnetPeer *p, const void *buf, size_t n)
4 {
5         pthread_rwlock_rdlock(&p->mu);
6         int sock = p->sock;
7         pthread_rwlock_unlock(&p->mu);
8
9         ssize_t len = recv(sock, buf, n, MSG_WAITALL);
10         if (len < 0) {
11                 perror("recv");
12                 dragonnet_peer_delete(p);
13                 return;
14         }
15
16         // Connection closed
17         if (len == 0) {
18                 pthread_rwlock_wrlock(&p->mu);
19
20                 close(p->sock);
21                 p->sock = -1;
22                 p->state++;
23
24                 pthread_rwlock_unlock(&p->mu);
25         }
26 }