From 6bf2e483a385c2761ba2bd5a0b4299bc0a67c0e6 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 8 Aug 2008 00:23:49 +0200 Subject: Allow BNEP connection to timeout after 30 seconds --- compat/bnep.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'compat') diff --git a/compat/bnep.c b/compat/bnep.c index 604ed552..841e5fad 100644 --- a/compat/bnep.c +++ b/compat/bnep.c @@ -257,6 +257,7 @@ int bnep_create_connection(int sk, uint16_t role, uint16_t svc, char *dev) struct bnep_setup_conn_req *req; struct bnep_control_rsp *rsp; struct __service_16 *s; + struct timeval timeo; unsigned char pkt[BNEP_MTU]; int r; @@ -265,10 +266,16 @@ int bnep_create_connection(int sk, uint16_t role, uint16_t svc, char *dev) req->type = BNEP_CONTROL; req->ctrl = BNEP_SETUP_CONN_REQ; req->uuid_size = 2; /* 16bit UUID */ + s = (void *) req->service; s->dst = htons(svc); s->src = htons(role); + memset(&timeo, 0, sizeof(timeo)); + timeo.tv_sec = 30; + + setsockopt(sk, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof(timeo)); + if (send(sk, pkt, sizeof(*req) + sizeof(*s), 0) < 0) return -1; @@ -278,6 +285,11 @@ receive: if (r <= 0) return -1; + memset(&timeo, 0, sizeof(timeo)); + timeo.tv_sec = 0; + + setsockopt(sk, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof(timeo)); + errno = EPROTO; if (r < sizeof(*rsp)) -- cgit