* 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:
Corinna Vinschen 2009-06-30 10:36:40 +00:00
parent 9adef9ffef
commit 4a83803381
3 changed files with 18 additions and 14 deletions

View File

@ -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> 2009-06-29 Christopher Faylor <me+cygwin@cgf.cx>
* select.cc (peek_pipe): Turn on (temporarily?) the experimental code * select.cc (peek_pipe): Turn on (temporarily?) the experimental code

View File

@ -1489,8 +1489,8 @@ fhandler_socket::send_internal (struct _WSAMSG *wsamsg, int flags)
{ {
buf.buf = wsamsg->lpBuffers[i].buf + off; buf.buf = wsamsg->lpBuffers[i].buf + off;
buf.len = wsamsg->lpBuffers[i].len - off; buf.len = wsamsg->lpBuffers[i].len - off;
if (buf.len > 65536) /* See KB 823764 */ if (buf.len > 65520) /* See net.cc:fdsock() and MSDN KB 823764 */
buf.len = 65536; buf.len = 65520;
do do
{ {

View File

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