diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/l2test.c | 28 | 
1 files changed, 27 insertions, 1 deletions
| diff --git a/test/l2test.c b/test/l2test.c index c345d06a..fa8cdf5e 100644 --- a/test/l2test.c +++ b/test/l2test.c @@ -78,6 +78,7 @@ int master = 0;  int auth = 0;  int encrypt = 0;  int socktype = SOCK_SEQPACKET; +int linger = 0;  float tv2fl(struct timeval tv)  { @@ -118,6 +119,16 @@ int do_connect(char *svr)  		return -1;  	} +	/* Enable SO_LINGER */ +	if (linger) { +		struct linger l = { .l_onoff = 1, .l_linger = linger }; +		if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) { +			syslog(LOG_ERR, "Can't enable SO_LINGER. %s(%d)", +				strerror(errno), errno); +			return -1; +		} +	} +  	memset(&rem_addr, 0, sizeof(rem_addr));  	rem_addr.l2_family = AF_BLUETOOTH;  	baswap(&rem_addr.l2_bdaddr, strtoba(svr)); @@ -228,6 +239,16 @@ void do_listen( void (*handler)(int sk) )  		syslog(LOG_INFO, "Connect from %s [imtu %d, omtu %d, flush_to %d]\n",  		       batostr(&ba), opts.imtu, opts.omtu, opts.flush_to); +		/* Enable SO_LINGER */ +		if (linger) { +			struct linger l = { .l_onoff = 1, .l_linger = linger }; +			if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) { +				syslog(LOG_ERR, "Can't enable SO_LINGER. %s(%d)", +					strerror(errno), errno); +				exit(1); +			} +		} +  		handler(s1);  		syslog(LOG_INFO, "Disconnect\n"); @@ -390,6 +411,7 @@ void usage(void)  		"\t[-b bytes] [-S bdaddr] [-P psm]\n"  	       	"\t[-I imtu] [-O omtu]\n"  		"\t[-N num] send num blocks (default = infinite)\n" +		"\t[-L seconds] enable SO_LINGER\n"  		"\t[-D] use connectionless channel (datagram)\n"  		"\t[-A] request authentication\n"  		"\t[-E] request encryption\n" @@ -406,7 +428,7 @@ int main(int argc ,char *argv[])  	mode = RECV; need_addr = 0; -	while ((opt=getopt(argc,argv,"rdscuwmnb:P:I:O:S:N:MAED")) != EOF) { +	while ((opt=getopt(argc,argv,"rdscuwmnb:P:I:O:S:N:MAEDL:")) != EOF) {  		switch(opt) {  		case 'r':  			mode = RECV; @@ -465,6 +487,10 @@ int main(int argc ,char *argv[])  			omtu = atoi(optarg);  			break; +		case 'L': +			linger = atoi(optarg); +			break; +  		case 'M':  			master = 1;  			break; | 
