diff options
Diffstat (limited to 'winsup/cygwin/net.cc')
-rw-r--r-- | winsup/cygwin/net.cc | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index b6ec47744..bf982b317 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -492,26 +492,23 @@ fdsock (cygheap_fdmanip& fd, const device *dev, SOCKET soc) fd->set_flags (O_RDWR | O_BINARY); fd->uninterruptible_io (true); debug_printf ("fd %d, name '%s', soc %p", (int) fd, dev->name, soc); -#if 0 - /* Same default buffer sizes as on Linux (instead of WinSock default 8K). - NOT. If the SO_RCVBUF size exceeds 65535(*), and if the socket is - connected to a remote machine, then duplicating the socket on - fork/exec fails with WinSock error 10022, WSAEINVAL. Given that, - there's not any good reason to set the buffer sizes at all. So we - stick with the defaults. However, an explanation for this weird - behaviour would be nice. I keep this stuff in the code for later - generations. Archeological programmers might find it useful. + /* Raise default buffer sizes (instead of WinSock default 8K). + + NOTE. If the SO_RCVBUF size exceeds 65535(*), and if the socket is + connected to a remote machine, then duplicating the socket on fork/exec + fails with WinSock error 10022, WSAEINVAL. An explanation for this + weird behaviour would be nice. (*) Maximum normal TCP window size. Coincidence? */ - int rmem = dev == tcp_dev ? 87380 : 120832; - int wmem = dev == tcp_dev ? 16384 : 120832; + int rmem = 65520; + int wmem = 65520; if (::setsockopt (soc, SOL_SOCKET, SO_RCVBUF, (char *) &rmem, sizeof (int))) debug_printf ("setsockopt(SO_RCVBUF) failed, %lu", WSAGetLastError ()); if (::setsockopt (soc, SOL_SOCKET, SO_SNDBUF, (char *) &wmem, sizeof (int))) debug_printf ("setsockopt(SO_SNDBUF) failed, %lu", WSAGetLastError ()); -#endif + return true; } |