From 3d3a02c97fba5ab46d3685c8266c859838fdd6a9 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 29 Jan 2014 11:08:16 +0000 Subject: io.c: check socket on other than linux * io.c (nogvl_copy_stream_sendfile): check socket on other than linux, as sendfile(2) on non-socket fd works only on linux. [Feature #9427] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ io.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3a6b031a86..ded0ed62fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Jan 29 20:08:15 2014 Nobuyoshi Nakada + + * io.c (nogvl_copy_stream_sendfile): check socket on other than + linux, as sendfile(2) on non-socket fd works only on linux. + [Feature #9427] + Wed Jan 29 18:09:48 2014 Eric Wong * io.c (nogvl_copy_stream_sendfile): remove socket check diff --git a/io.c b/io.c index 00f9abc2c5..0020f4704a 100644 --- a/io.c +++ b/io.c @@ -10062,6 +10062,10 @@ nogvl_copy_stream_sendfile(struct copy_stream_struct *stp) stp->error_no = errno; return -1; } +#ifndef __linux__ + if ((dst_stat.st_mode & S_IFMT) != S_IFSOCK) + return 0; +#endif src_offset = stp->src_offset; use_pread = src_offset != (off_t)-1; -- cgit v1.2.3