Folks,
I still didn't have any time to test on Win2K but Diego Gomez reported a
networking problem which allowed me to track down another of those
network buggers (fortunately, he had a reliable test case). Could
somebody try to see if the latest fixes do solve the problems you've
been seeing?! There's a new VM in town at:
http://isgwww.cs.uni-magdeburg.de/~raab/squeak/alpha/SqueakNetFix2.zip
If you're interested, below is the message to Diego explaining the
problem.
Cheers,
- Andreas
-----Original Message-----
From: Andreas Raab [mailto:[EMAIL PROTECTED]]
Sent: Thursday, February 14, 2002 12:19 AM
To: '[EMAIL PROTECTED]'; '[EMAIL PROTECTED]'
Subject: RE: RE: A Windows socket question
Diego,
I found it. As I said that was an _excellent_ catch. For your amusement
here's what happened: The real problem was that the VM didn't clean up
the OS socket handle when a close operation succeeded. Now this doesn't
sound like a big problem, but you need to consider that there's a
destroy operation following afterwards which may operate on the
(successfully closed) socket handle. Usually, this results in a sequence
where if the close succeeds the destroy fails. Which is effectively fine
since abort is really the last resort and may fail without causing harm.
_HOWEVER_, something in your configuration went slightly different (I'm
not even quite sure how ;-) In effect, what happened was that inbetween
the close and the destroy a new socket was accepted. This happens on the
VM level (e.g., in a separate thread which is basically run at interrupt
time). And this operation could give the newly accepted socket the
handle of the socket which was closed before (since after a successful
close the socket handle is invalid). Which - just a second later - got
destroyed. E.g., the sequence is roughly as follows:
server accepts socket with handle XXX
server processes data using socket
server closes socket with handle XXX
<- client attempt new connection ->
<- server VM accepts new socket in thread with handle XXX ->
server destroys socket with handle XXX
This leaves the client in the state where it thinks the connection has
been abnormally closed by the host (which is correct!) and the host in a
state where it may even think that the socket is entirely valid! Note
that one of the interesting things here is that due to Squeak process
scheduling the time between the close and the destroy can be arbitrarily
large.
Anyways, I've uploaded a new VM onto
http://isgwww.cs.uni-magdeburg.de/~raab/squeak/alpha/SqueakNetFix2.zip
which solves that problem. Let me know how it goes - if it works out
I'll inform the PWS people.
Cheers,
- Andreas