From ac83d3b0d607f2bdc373365bc2f08f0cde023bf3 Mon Sep 17 00:00:00 2001 From: danieldg Date: Tue, 2 Mar 2010 02:45:29 +0000 Subject: Don't try quite so hard to writev() the entire buffer in one go git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12583 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/inspsocket.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/inspsocket.cpp') diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index 65b554006..e3b8f8c8a 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -216,6 +216,9 @@ void StreamSocket::DoRead() } } +/* Don't try to prepare huge blobs of data to send to a blocked socket */ +static const int MYIOV_MAX = IOV_MAX < 128 ? IOV_MAX : 128; + void StreamSocket::DoWrite() { if (sendq.empty()) @@ -330,11 +333,11 @@ void StreamSocket::DoWrite() { // Prepare a writev() call to write all buffers efficiently int bufcount = sendq.size(); - - // cap the number of buffers at IOV_MAX - if (bufcount > IOV_MAX) + + // cap the number of buffers at MYIOV_MAX + if (bufcount > MYIOV_MAX) { - bufcount = IOV_MAX; + bufcount = MYIOV_MAX; } int rv_max = 0; -- cgit v1.3.1-10-gc9f91