sendfile() failed (38: Function not implemented)

Igor Sysoev is at rambler-co.ru
Sun Dec 18 11:33:48 MSK 2005


On Sun, 18 Dec 2005, Alex Kitschkiruk wrote:

> а что можно сделать? а как же rtsig метод?
> ядро я не могу поменять. это значит, что я остаюсь без Sendfile?
> я так понимаю что с ним намного эффективней работается...
> а у меня nginx собирается как раз для раздачи огромных файлов.... :(
> Неужели отключать sendfile при компиляции? К чему это может привести?

Прилагаемый патч решает эту проблему.

> > На машине установлены include'ы для Линукса 2.6, а ядро 2.4.20.
> > Поэтому configure нашёл epoll, которого нет в ядре, и sendfile64(),
> > который появился только в 2.4.22.


Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
--- auto/os/linux	Mon Nov 28 13:29:22 2005
+++ auto/os/linux	Sun Dec 18 11:18:34 2005
@@ -38,7 +38,7 @@
 
 ngx_feature="epoll"
 ngx_feature_name="NGX_HAVE_EPOLL"
-ngx_feature_run=no
+ngx_feature_run=yes
 ngx_feature_incs="#include <sys/epoll.h>"
 ngx_feature_libs=
 ngx_feature_test="int efd = 0, fd = 1, n;
@@ -62,12 +62,14 @@
 CC_AUX_FLAGS="-D_GNU_SOURCE"
 ngx_feature="sendfile()"
 ngx_feature_name="NGX_HAVE_SENDFILE"
-ngx_feature_run=no
-ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/sendfile.h>
+#include <errno.h>"
 ngx_feature_libs=
 ngx_feature_test="int s = 0, fd = 1;
                   ssize_t n; off_t off = 0;
-                  n = sendfile(s, fd, &off, 1)"
+                  n = sendfile(s, fd, &off, 1);
+                  if (n == -1 && errno == ENOSYS) return 1"
 . auto/feature
 
 if [ $ngx_found = yes ]; then
@@ -80,12 +82,14 @@
 CC_AUX_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
 ngx_feature="sendfile64()"
 ngx_feature_name="NGX_HAVE_SENDFILE64"
-ngx_feature_run=no
-ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/sendfile.h>
+#include <errno.h>"
 ngx_feature_libs=
 ngx_feature_test="int s = 0, fd = 1;
                   ssize_t n; off_t off = 0;
-                  n = sendfile(s, fd, &off, 1)"
+                  n = sendfile(s, fd, &off, 1);
+                  if (n == -1 && errno == ENOSYS) return 1"
 . auto/feature
 
 


More information about the nginx-ru mailing list