* net.cc (fdsock): Set default socket buffer sizes to 65520. Change
comment accordingly. * fhandler_socket.cc (fhandler_socket::send_internal): Set maximum send size to 65520 as well.
This commit is contained in:
parent
9adef9ffef
commit
4a83803381
|
@ -1,3 +1,10 @@
|
|||
2009-06-30 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* net.cc (fdsock): Set default socket buffer sizes to 65520. Change
|
||||
comment accordingly.
|
||||
* fhandler_socket.cc (fhandler_socket::send_internal): Set maximum
|
||||
send size to 65520 as well.
|
||||
|
||||
2009-06-29 Christopher Faylor <me+cygwin@cgf.cx>
|
||||
|
||||
* select.cc (peek_pipe): Turn on (temporarily?) the experimental code
|
||||
|
|
|
@ -1489,8 +1489,8 @@ fhandler_socket::send_internal (struct _WSAMSG *wsamsg, int flags)
|
|||
{
|
||||
buf.buf = wsamsg->lpBuffers[i].buf + off;
|
||||
buf.len = wsamsg->lpBuffers[i].len - off;
|
||||
if (buf.len > 65536) /* See KB 823764 */
|
||||
buf.len = 65536;
|
||||
if (buf.len > 65520) /* See net.cc:fdsock() and MSDN KB 823764 */
|
||||
buf.len = 65520;
|
||||
|
||||
do
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue