diff options
| -rw-r--r-- | test/l2test.c | 45 | 
1 files changed, 29 insertions, 16 deletions
| diff --git a/test/l2test.c b/test/l2test.c index b3c450df..5c7955bc 100644 --- a/test/l2test.c +++ b/test/l2test.c @@ -305,8 +305,8 @@ static int do_connect(char *svr)  		opts.imtu, opts.omtu, opts.flush_to, opts.mode, conn.hci_handle,  		conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]); -	if (data_size > opts.omtu) -		data_size = opts.omtu; +	omtu = opts.omtu; +	imtu = opts.imtu;  	return sk; @@ -681,7 +681,7 @@ static void recv_mode(int sk)  static void do_send(int sk)  {  	uint32_t seq; -	int i, fd, len; +	int i, fd, len, buflen, size, sent;  	syslog(LOG_INFO, "Sending ..."); @@ -692,8 +692,17 @@ static void do_send(int sk)  							strerror(errno), errno);  			exit(1);  		} -		len = read(fd, buf, data_size); -		send(sk, buf, len, 0); + +		sent = 0; +		size = read(fd, buf, data_size); +		while (size > 0) { +			buflen = (size > omtu) ? omtu : size; + +			len = send(sk, buf + sent, buflen, 0); + +			sent += len; +			size -= len; +		}  		return;  	} else {  		for (i = 6; i < data_size; i++) @@ -706,11 +715,20 @@ static void do_send(int sk)  		*(uint16_t *) (buf + 4) = htobs(data_size);  		seq++; -		len = send(sk, buf, data_size, 0); -		if (len < 0 || len != data_size) { -			syslog(LOG_ERR, "Send failed: %s (%d)", +		sent = 0; +		size = data_size; +		while (size > 0) { +			buflen = (size > omtu) ? omtu : size; + +			len = send(sk, buf, buflen, 0); +			if (len < 0 || len != buflen) { +				syslog(LOG_ERR, "Send failed: %s (%d)",  							strerror(errno), errno); -			exit(1); +				exit(1); +			} + +			sent += len; +			size -= len;  		}  		if (num_frames && delay && count && !(seq % count)) @@ -1123,13 +1141,8 @@ int main(int argc, char *argv[])  		exit(1);  	} -	if (data_size < 0) { -		data_size = 48; -		if (imtu > data_size) -			data_size = imtu; -		if (omtu > data_size) -			data_size = omtu; -	} +	if (data_size < 0) +		data_size = (omtu > imtu) ? omtu : imtu;  	if (!(buf = malloc(data_size))) {  		perror("Can't allocate data buffer"); | 
