* 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>
|
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
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user