From cce7cf2c1428d174dd49177358dc52b234e97e5c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 22 Dec 2014 15:51:30 +0100 Subject: [SERVER] Configurable client timeout, adaptive replication speed (to be tested against varying bw/latency), retry sendfile call if ret <= len --- src/server/net.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/server/net.c') diff --git a/src/server/net.c b/src/server/net.c index b40413f..5ea2e36 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -301,11 +301,15 @@ void *net_client_handler(void *dnbd3_client) if ( request.size != 0 ) { // Send payload if request length > 0 - const ssize_t ret = sendfile( client->sock, image_file, (off_t *)&request.offset, request.size ); - if ( ret != request.size ) { - pthread_mutex_unlock( &client->sendMutex ); - printf( "[ERROR] sendfile failed (image to net %d/%d)\n", (int)ret, (int)request.size ); - goto exit_client_cleanup; + size_t done = 0; + while ( done < request.size ) { + const ssize_t ret = sendfile( client->sock, image_file, (off_t *)&request.offset, request.size ); + if ( ret <= 0 ) { + pthread_mutex_unlock( &client->sendMutex ); + printf( "[ERROR] sendfile failed (image to net. ret=%d, sent %d/%d, errno=%d)\n", (int)ret, (int)done, (int)request.size, (int)errno ); + goto exit_client_cleanup; + } + done += ret; } } pthread_mutex_unlock( &client->sendMutex ); -- cgit v1.2.3-55-g7522