diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-11-13 15:35:53 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-11-13 15:35:53 +0300 |
commit | ab36239578ec48ae84700f5ae740c41ba25ebc97 (patch) | |
tree | f683257a986f995ae9ede6b641a6d7be3df9acb8 /winsup/cygwin/net.cc | |
parent | 4ade2414451591e2a4dc3e855749629dad0b0e05 (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.cc | 19 |
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; } |