Hi there,<br><br>I am having some trouble quickly establishing and tearing down TCP<br>connections and bindings on the same port. After a couple of<br>iterations my connecting thread reports a successful connection but<br>
the accepting thread does not. This might be a normal artifact of how<br>TCP is implemented on Windows but I do not know enough about TCP to be<br>sure.<br><br>Below is a little sample that illustrates the problem. Iteration on my
<br>Windows XP Professional stops at 2 or 3.&nbsp; I have also attached the<br>output of the sample, which includes interleaved calls to netstat.<br><br>Any ideas?<br><br>Thanks in advance,<br>-pp<br><br>(begin<br>&nbsp; (require (lib &quot;
async-channel.ss&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;thread.ss&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;process.ss&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lib &quot;setf.ss&quot; &quot;swindle&quot;))<br>&nbsp; <br>&nbsp; (define ch (make-async-channel))<br>&nbsp; <br>
&nbsp; (define (accept port)<br>&nbsp;&nbsp;&nbsp; (run-server port<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda (in out)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (printf &quot;Accepted~n&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (async-channel-put ch (current-thread))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sleep 100000))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #f))<br>&nbsp; <br>&nbsp; (define (connect port)<br>&nbsp;&nbsp;&nbsp; (printf &quot;Connecting~n&quot;)<br>&nbsp;&nbsp;&nbsp; (tcp-connect &quot;localhost&quot; port)<br>&nbsp;&nbsp;&nbsp; (printf &quot;OK~n&quot;))<br>&nbsp; <br>&nbsp; (define (test port)<br>&nbsp;&nbsp;&nbsp; (let ((th1 (thread (lambda ()
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (accept port)))))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (connect port)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (system &quot;netstat&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (printf &quot;Waiting for read thread to start~n&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((th2 (async-channel-get ch)))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (printf &quot;OK~n&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kill-thread th1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (kill-thread th2))))<br>&nbsp; <br>&nbsp; (let loop ((n 0))<br>&nbsp;&nbsp;&nbsp; (printf &quot;Test ~a~n&quot; n)<br>&nbsp;&nbsp;&nbsp; (test 41235)<br>&nbsp;&nbsp;&nbsp; (printf &quot;...OK~n&quot;)<br>
&nbsp;&nbsp;&nbsp; (loop (+ n 1))))<br><br>-------------------------------------------------------------------------------------<br>Test 0<br>Connecting<br>OK<br>Accepted<br><br>Active Connections<br>&nbsp; Proto&nbsp; Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State
<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:1602&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:1602&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br><br>Waiting for read thread to start<br>OK<br>...OK<br><br>Test 1<br>Connecting
<br>OK<br><br>Active Connections<br><br>&nbsp; Proto&nbsp; Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:1602&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLOSE_WAIT<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:1603&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED
<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:1602&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIN_WAIT_2<br>&nbsp; TCP&nbsp;&nbsp;&nbsp; Strider:41235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:1603&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br><br>Waiting for read thread to start<br><br>