9 #include "recv_thread.h"
11 void *dragonnet_peer_recv_thread(void *g_peer)
13 DragonnetPeer *p = (DragonnetPeer *) g_peer;
15 pthread_rwlock_wrlock(p->mu);
16 assert(p->state == DRAGONNET_PEER_CREATED);
18 pthread_rwlock_unlock(p->mu);
23 pthread_rwlock_rdlock(p->mu);
24 ssize_t len = recv(p->sock, &msg, sizeof msg, MSG_WAITALL);
25 pthread_rwlock_unlock(p->mu);
27 if (len < 0 && errno != EWOULDBLOCK) {
29 dragonnet_peer_delete(p);
34 if ((len >= 0 && len != sizeof msg) || errno == EWOULDBLOCK) {
35 pthread_rwlock_wrlock(p->mu);
41 pthread_rwlock_unlock(p->mu);