Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-11-13 15:35:53 +0300
committerCorinna Vinschen <corinna@vinschen.de>2009-11-13 15:35:53 +0300
commitab36239578ec48ae84700f5ae740c41ba25ebc97 (patch)
treef683257a986f995ae9ede6b641a6d7be3df9acb8 /winsup/cygwin/net.cc
parent4ade2414451591e2a4dc3e855749629dad0b0e05 (diff)
* net.cc (fdsock): Fill _rmem and _wmem with valid values returned
from getsockopt if setsockopt with desired values failed.
Diffstat (limited to 'winsup/cygwin/net.cc')
-rw-r--r--winsup/cygwin/net.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index c766d7d08..509269a83 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -483,6 +483,8 @@ cygwin_getprotobynumber (int number)
bool
fdsock (cygheap_fdmanip& fd, const device *dev, SOCKET soc)
{
+ int size;
+
fd = build_fh_dev (*dev);
if (!fd.isopen ())
return false;
@@ -506,15 +508,26 @@ fdsock (cygheap_fdmanip& fd, const device *dev, SOCKET soc)
be nice, though.
(*) Maximum normal TCP window size. Coincidence? */
-
((fhandler_socket *) fd)->rmem () = 65535;
((fhandler_socket *) fd)->wmem () = 65535;
if (::setsockopt (soc, SOL_SOCKET, SO_RCVBUF,
(char *) &((fhandler_socket *) fd)->rmem (), sizeof (int)))
- debug_printf ("setsockopt(SO_RCVBUF) failed, %lu", WSAGetLastError ());
+ {
+ debug_printf ("setsockopt(SO_RCVBUF) failed, %lu", WSAGetLastError ());
+ if (::getsockopt (soc, SOL_SOCKET, SO_RCVBUF,
+ (char *) &((fhandler_socket *) fd)->rmem (),
+ (size = sizeof (int), &size)))
+ system_printf ("getsockopt(SO_RCVBUF) failed, %lu", WSAGetLastError ());
+ }
if (::setsockopt (soc, SOL_SOCKET, SO_SNDBUF,
(char *) &((fhandler_socket *) fd)->wmem (), sizeof (int)))
- debug_printf ("setsockopt(SO_SNDBUF) failed, %lu", WSAGetLastError ());
+ {
+ debug_printf ("setsockopt(SO_SNDBUF) failed, %lu", WSAGetLastError ());
+ if (::getsockopt (soc, SOL_SOCKET, SO_SNDBUF,
+ (char *) &((fhandler_socket *) fd)->wmem (),
+ (size = sizeof (int), &size)))
+ system_printf ("getsockopt(SO_SNDBUF) failed, %lu", WSAGetLastError ());
+ }
return true;
}