summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorSebastian2016-02-10 21:53:15 +0100
committerSebastian2016-02-11 00:09:39 +0100
commit1ee67aedd55b452c7d5851d0e39e01aef4aca766 (patch)
treecaf482cd40463d5a4b15f14e5bd5b2d34bf936bd /src/server/net.c
parentcleanup commits (diff)
downloaddnbd3-1ee67aedd55b452c7d5851d0e39e01aef4aca766.tar.gz
dnbd3-1ee67aedd55b452c7d5851d0e39e01aef4aca766.tar.xz
dnbd3-1ee67aedd55b452c7d5851d0e39e01aef4aca766.zip
dnbd3server build success on freebsd :)
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/server/net.c b/src/server/net.c
index d840718..b919d62 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -28,9 +28,17 @@
#include "../shared/sockhelper.h"
#include "../serialize.h"
-#include <sys/sendfile.h>
#include <assert.h>
+#ifdef __linux__
+#include <sys/sendfile.h>
+#endif
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#endif
+
static char nullbytes[500];
static uint64_t totalBytesSent = 0;
@@ -350,7 +358,12 @@ void *net_client_handler(void *dnbd3_client)
realBytes = image->realFilesize - request.offset;
}
while ( done < realBytes ) {
+#ifdef __linux__
const ssize_t ret = sendfile( client->sock, image_file, &offset, realBytes - done );
+#elif defined(__FreeBSD__)
+ off_t sent;
+ int ret = sendfile( image_file, client->sock, offset, realBytes - done, NULL, &sent, 0 );
+#endif
if ( ret <= 0 ) {
const int err = errno;
if ( lock ) pthread_mutex_unlock( &client->sendMutex );