Hi there,

today's bug from hell might not be a Racket related issue (to me it seems more 
of a Windows type of thing), but maybe somebody has already come across 
something similar, so here goes:

I have a Racket application serving as a stress test against a TCP server, that 
is, the Racket application calls tcp-connect() to the remote server, then does 
some data exchange, closes the ports and starts all over again. To make it more 
interesting, I have 12 instances of this application running concurrently, so 
there is quite a lot of connection establishment and -takedown going on.

So far, so good - only thing I need to mention is that I call tcp-connect only 
with the minimum necessary parameters (remote name and remote port).

All of this runs fine for a while, until ALL of the stress clients begin to 
raise WSAEADDRESSINUSE exceptions. Now I understand that WSAEADDRESSINUSE means 
that an application tries to bind a socket to a local port that is already used 
for another connection - but in the case of tcp-connect(), I assume that the 
call with no local port translates to a bind() with port 0 which instructs the 
TCP layer to select a free port? Or does the Racket TCP/IP translation layer do 
its own magic with local port selection which might be buggy?

I also understand that the OS will keep bound sockets around for a while (which 
can be easily verified by looking at the netstat() output), but the "normal" 
BSD compatible implementation of bind(...0...) will skip sockets in those 
states, so I don't quite understand where the WSAEADDRESSINUSE error comes from 
unless the port selection was made outside of the low level network software...

any ideas?

Thanks!
  
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to