diff options
author | Simon Rettberg | 2014-12-22 20:45:51 +0100 |
---|---|---|
committer | Simon Rettberg | 2014-12-22 20:45:51 +0100 |
commit | 48050af6e1342ce6e53bd6cf0492b5ab73e9012f (patch) | |
tree | 83783358e064c8c47aa1c28651a55a072191d6b8 | |
parent | [SERVER] Improve replication and reconnecting behaviour (diff) | |
download | dnbd3-48050af6e1342ce6e53bd6cf0492b5ab73e9012f.tar.gz dnbd3-48050af6e1342ce6e53bd6cf0492b5ab73e9012f.tar.xz dnbd3-48050af6e1342ce6e53bd6cf0492b5ab73e9012f.zip |
[SERVER] Fix new sendfile handling, wake up uplink thread if server should be changed
-rw-r--r-- | src/server/altservers.c | 2 | ||||
-rw-r--r-- | src/server/net.c | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/server/altservers.c b/src/server/altservers.c index 7923f1a..106e07a 100644 --- a/src/server/altservers.c +++ b/src/server/altservers.c @@ -524,6 +524,8 @@ static void *altservers_main(void *data) uplink->betterFd = bestSock; uplink->betterServer = servers[bestIndex]; uplink->rttTestResult = RTT_DOCHANGE; + static uint64_t counter = 1; + write( uplink->signal, &counter, sizeof(counter) ); } else if (bestSock == -1) { // No server was reachable uplink->rttTestResult = RTT_NOT_REACHABLE; diff --git a/src/server/net.c b/src/server/net.c index 7d7ecb4..a0362c2 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -302,8 +302,9 @@ void *net_client_handler(void *dnbd3_client) if ( request.size != 0 ) { // Send payload if request length > 0 size_t done = 0; + off_t offset = (off_t)request.offset; while ( done < request.size ) { - const ssize_t ret = sendfile( client->sock, image_file, (off_t *)&request.offset, request.size ); + const ssize_t ret = sendfile( client->sock, image_file, &offset, request.size - done ); if ( ret <= 0 ) { pthread_mutex_unlock( &client->sendMutex ); printf( "[ERROR] sendfile failed (image to net. ret=%d, sent %d/%d, errno=%d)\n", |