diff --git a/pand/bnep.c b/pand/bnep.c index 604ed55..88c1184 100644 --- a/pand/bnep.c +++ b/pand/bnep.c @@ -259,6 +259,7 @@ int bnep_create_connection(int sk, uint16_t role, uint16_t svc, char *dev) struct __service_16 *s; unsigned char pkt[BNEP_MTU]; int r; + struct timeval t = { 30, 0 }; /* Send request */ req = (void *) pkt; @@ -269,6 +270,8 @@ int bnep_create_connection(int sk, uint16_t role, uint16_t svc, char *dev) s->dst = htons(svc); s->src = htons(role); + setsockopt(sk, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)); + if (send(sk, pkt, sizeof(*req) + sizeof(*s), 0) < 0) return -1; @@ -278,6 +281,9 @@ receive: if (r <= 0) return -1; + t.tv_sec = 0; + setsockopt(sk, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)); + errno = EPROTO; if (r < sizeof(*rsp))