This is the mail archive of the cygwin@sources.redhat.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: socket read()/write() problem in 1.1.6 [solved]


On Monday 11 December 2000 16:58, Markus Hoenicka wrote:
> Finally it turns out that my problem was indeed a timing problem -
> not the read()/write() timing problem that Corinna suspected but a
> timing problem when closing the socket from the server side. I was
> not aware that my server relied on a certain time passing between the
> last write() on the server side and the closing of the socket as it
> was obscured by lots of cleanup code in my original program. This got
> clearer and clearer the simpler my testcases got. The newer Cygwin
> versions apparently speed up this cleanup or the closing of the
> socket and thus expose the flawed design of my server. Of course it
> is easy to work around this once you know.
>
> I'm sorry for the noise that I created, but putting together the
> testcases and Corinna's input finally helped me to see the problem.

This is a lucky conincidence. I had just tracked down the problem to
a point where I finally saw that no graceful shutdown is made.

However, it's not only a problem of your code alone. I read the
description of closesocket(), shutdown() etc. etc. in MSDN to find
out the following.

closesocket() behaves different dependent on the SO_LINGER option
set. The default behaviour of SO_DONTLINGER which results in a
immediate return while the connection is gracefully shutdown
in the background.

The new Cygwin socket code doesn't use standard handle duplication
on socket inheritance between processes but the special Winsock2
functions WSADuplicateSocket() and WSASocket().

When calling closesocket() on duplicated sockets using the above
Winsock2 method, closesocket() seems to act as if SO_LINGER with
zero time-out is enabled which results in closesocket() returning
immediately while forcing an immediate termination of the
connection.

That behaviour is not documented in the MSDN, AFAICS.

I tried various workarounds but the only reliable way seems to
be to perform a graceful shutdown in the application.

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin@cygwin.com
Red Hat, Inc.

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]