diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index 59e1b09..0ec0532 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -4,10 +4,8 @@
 
 #define _GNU_SOURCE             /* pread(), pwrite(), gethostname() */
 
-#if 0
 #define _FILE_OFFSET_BITS  64
 #define _LARGEFILE_SOURCE
-#endif
 
 
 #include <unistd.h>
@@ -28,7 +26,13 @@
 #include <sys/sysctl.h>
 #include <sys/wait.h>
 #include <sys/socket.h>
+
+#if (HAVE_SENDFILE64)
 #include <sys/sendfile.h>
+#else
+extern ssize_t sendfile(int s, int fd, int32_t *offset, size_t size);
+#endif
+
 #include <netinet/in.h>
 #include <netinet/tcp.h>        /* TCP_CORK */
 #include <arpa/inet.h>
@@ -37,15 +41,6 @@
 
 
 
-#if 0
-#define SIZE_FMT   "%d"
-#define SIZEX_FMT  "%x"
-#define PID_FMT    "%d"
-#define RLIM_FMT   "%lu"
-#endif
-
-
-
 #ifndef HAVE_SELECT
 #define HAVE_SELECT  1
 #endif
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index 0b8e417..9b311b2 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -8,7 +8,7 @@
 {
     int              rc;
     char            *prev;
-    off_t            offset;
+    off_t            fprev;
     size_t           size, fsize, sent;
     ngx_int_t        use_cork, eintr;
     struct iovec    *iov;
@@ -17,6 +17,11 @@
     ngx_array_t      header;
     ngx_event_t     *wev;
     ngx_chain_t     *cl, *tail;
+#if (HAVE_SENDFILE64)
+    off_t            offset;
+#else
+    int32_t          offset;
+#endif
 
     wev = c->write;
 
@@ -82,20 +87,20 @@
 
             file = cl->hunk;
             fsize = (size_t) (file->file_last - file->file_pos);
-            offset = file->file_last;
+            fprev = file->file_last;
             cl = cl->next; 
 
             /* coalesce the neighbouring file hunks */
 
             while (cl && (cl->hunk->type & NGX_HUNK_FILE)) {
                 if (file->file->fd != cl->hunk->file->fd
-                    || offset != cl->hunk->file_pos)
+                    || fprev != cl->hunk->file_pos)
                 {
                     break;
                 }
 
                 fsize += (size_t) (cl->hunk->file_last - cl->hunk->file_pos);
-                offset = cl->hunk->file_last;
+                fprev = cl->hunk->file_last;
                 cl = cl->next;
             }
         }
@@ -108,7 +113,11 @@
         tail = cl;
 
         if (fsize) {
+#if (HAVE_SENDFILE64)
             offset = file->file_pos;
+#else
+            offset = (int32_t) file->file_pos;
+#endif
             rc = sendfile(c->fd, file->file->fd, &offset, fsize);
 
             if (rc == -1) {
diff --git a/src/os/unix/ngx_os.h b/src/os/unix/ngx_os.h
index 1cc597b..6f0a2e8 100644
--- a/src/os/unix/ngx_os.h
+++ b/src/os/unix/ngx_os.h
@@ -62,4 +62,9 @@
 #endif
 
 
+#ifdef SOLARIS
+#include <ngx_solaris.h>
+#endif
+
+
 #endif /* _NGX_OS_H_INCLUDED_ */
diff --git a/src/os/unix/ngx_solaris_init.c b/src/os/unix/ngx_solaris_init.c
index 3b13838..b2aba61 100644
--- a/src/os/unix/ngx_solaris_init.c
+++ b/src/os/unix/ngx_solaris_init.c
@@ -12,8 +12,13 @@
     ngx_unix_recv,
     NULL,
     NULL,
+#if (HAVE_SENDFILE)
+    ngx_solaris_sendfilev_chain,
+    NGX_IO_SENDFILE
+#else
     ngx_writev_chain,
     0
+#endif
 };
 
 
diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c
index 8fe5cef..c7d69fe 100644
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -9,9 +9,10 @@
     int             fd;
     char           *prev;
     off_t           fprev;
-    size_t          sent;
+    size_t          sent, size;
     ssize_t         n;
     ngx_int_t       eintr;
+    ngx_err_t       err;
     sendfilevec_t  *sfv;
     ngx_array_t     vec;
     ngx_event_t    *wev;
@@ -26,10 +27,14 @@
     do {
         fd = SFV_FD_SELF;
         prev = NULL;
+        fprev = 0;
         sfv = NULL;
         eintr = 0;
         sent = 0;
 
+        ngx_init_array(vec, c->pool, 10, sizeof(sendfilevec_t),
+                       NGX_CHAIN_ERROR);
+
         /* create the sendfilevec and coalesce the neighbouring hunks */
 
         for (cl = in; cl; cl = cl->next) {
@@ -47,7 +52,7 @@
                     ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR);
                     sfv->sfv_fd = SFV_FD_SELF;
                     sfv->sfv_flag = 0;
-                    sfv->sfv_off = cl->hunk->pos;
+                    sfv->sfv_off = (off_t) (uintptr_t) cl->hunk->pos;
                     sfv->sfv_len = cl->hunk->last - cl->hunk->pos;
                 }
 
@@ -72,7 +77,7 @@
             }
         }
 
-        n = sendfile(c->fd, vec->elts, vec->nelts, &sent);
+        n = sendfilev(c->fd, vec.elts, vec.nelts, &sent);
 
         if (n == -1) {
             err = ngx_errno;
@@ -93,7 +98,7 @@
         }
 
 #if (NGX_DEBUG_WRITE_CHAIN)
-        ngx_log_debug(c->log, "sendfilev: %d " SIZE_T_FMT ", n _ sent);
+        ngx_log_debug(c->log, "sendfilev: %d " SIZE_T_FMT _ n _ sent);
 #endif
 
         c->sent += sent;
diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c
index 85d345c..a9cac1d 100644
--- a/src/os/unix/ngx_writev_chain.c
+++ b/src/os/unix/ngx_writev_chain.c
@@ -10,80 +10,94 @@
     ssize_t          n, size;
     off_t            sent;
     struct iovec    *iov;
+    ngx_int_t        eintr;
     ngx_err_t        err;
     ngx_array_t      io;
     ngx_chain_t     *cl;
+    ngx_event_t     *wev;
 
-    if (!c->write->ready) {
+    wev = c->write;
+
+    if (!wev->ready) {
         return in;
     }
 
     ngx_init_array(io, c->pool, 10, sizeof(struct iovec), NGX_CHAIN_ERROR);
 
-    prev = NULL;
-    iov = NULL;
+    do {
+        prev = NULL;
+        iov = NULL;
+        eintr = 0;
 
-    /* create the iovec and coalesce the neighbouring hunks */
+        /* create the iovec and coalesce the neighbouring hunks */
 
-    for (cl = in; cl; cl = cl->next) {
+        for (cl = in; cl; cl = cl->next) {
 
-        if (prev == cl->hunk->pos) {
-            iov->iov_len += cl->hunk->last - cl->hunk->pos;
-            prev = cl->hunk->last;
+            if (prev == cl->hunk->pos) {
+                iov->iov_len += cl->hunk->last - cl->hunk->pos;
+                prev = cl->hunk->last;
 
-        } else {
-            ngx_test_null(iov, ngx_push_array(&io), NGX_CHAIN_ERROR);
-            iov->iov_base = cl->hunk->pos;
-            iov->iov_len = cl->hunk->last - cl->hunk->pos;
-            prev = cl->hunk->last;
+            } else {
+                ngx_test_null(iov, ngx_push_array(&io), NGX_CHAIN_ERROR);
+                iov->iov_base = cl->hunk->pos;
+                iov->iov_len = cl->hunk->last - cl->hunk->pos;
+                prev = cl->hunk->last;
+            }
         }
-    }
 
-    n = writev(c->fd, io.elts, io.nelts);
+        n = writev(c->fd, io.elts, io.nelts);
 
-    if (n == -1) {
-        err = ngx_errno;
-        if (err == NGX_EAGAIN) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EAGAIN");
+        if (n == -1) {
+            err = ngx_errno;
+            if (err == NGX_EAGAIN) {
+                ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EAGAIN");
 
-        } else if (err == NGX_EINTR) {
-            ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EINTR");
+            } else if (err == NGX_EINTR) {
+                eintr = 1;
+                ngx_log_error(NGX_LOG_INFO, c->log, err, "writev() EINTR");
 
-        } else {
-            ngx_log_error(NGX_LOG_CRIT, c->log, err, "writev() failed");
-            return NGX_CHAIN_ERROR;
+            } else {
+                wev->error = 1;
+                ngx_log_error(NGX_LOG_CRIT, c->log, err, "writev() failed");
+                return NGX_CHAIN_ERROR;
+            }
         }
-    }
 
-    sent = n > 0 ? n : 0;
+        sent = n > 0 ? n : 0;
 
 #if (NGX_DEBUG_WRITE_CHAIN)
-    ngx_log_debug(c->log, "writev: " OFF_T_FMT  _ sent);
+        ngx_log_debug(c->log, "writev: " OFF_T_FMT  _ sent);
 #endif
 
-    c->sent += sent;
+        c->sent += sent;
 
-    for (cl = in; cl && sent > 0; cl = cl->next) {
+        for (cl = in; cl && sent > 0; cl = cl->next) {
 
-        size = cl->hunk->last - cl->hunk->pos;
+            size = cl->hunk->last - cl->hunk->pos;
 
 ngx_log_debug(c->log, "SIZE: %d" _ size);
 
-        if (sent >= size) {
-            sent -= size;
+            if (sent >= size) {
+                sent -= size;
 
-            if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
-                cl->hunk->pos = cl->hunk->last;
+                if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
+                    cl->hunk->pos = cl->hunk->last;
+                }
+
+                continue;
             }
 
-            continue;
+            if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
+                cl->hunk->pos += sent;
+            }
+
+            break;
         }
 
-        if (cl->hunk->type & NGX_HUNK_IN_MEMORY) {
-            cl->hunk->pos += sent;
-        }
+    } while (eintr);
 
-        break;
+    if (cl) {
+        wev->ready = 0;
     }
 
     return cl;
