Hello all ,

How can we allow a server to bind to a port that appears to be held open by a 
client process?  The netstat below indicates that port 9521 is not being 
listened
to by any server process:

$netstat -an | grep 9521
tcp        0      0 127.0.0.1:9521              127.0.0.1:9521              
ESTABLISHED
tcp        0      0 10.1.235.31:47776           10.1.19.219:9521            
ESTABLISHED
 
We are using SO_REUSEADDR in the server code, which on Solaris always allowed 
to re-bind to the port in question.
      int on = 1;
      if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
         printf("setsockopt SO_REUSEADDR failed: port=%d fd=%d", on, fd);
         
         
On Linux there appears to be a caveat with using SO_REUSEADDR in conjunction 
with INADDR_ANY.  This is from the Linux socket man page: 
       SO_REUSEADDR
              Indicates that the rules used in validating addresses supplied
              in a bind(2) call should allow reuse of local  addresses.  For
              PF_INET sockets this means that a socket may bind, except when
              there is an active listening  socket  bound  to  the  address.
              When  the  listening socket is bound to INADDR_ANY with a spe-
              cific port then it is not possible to bind to  this  port  for
              any local address.
despite the fact that no server can bind the port, no new client can establish 
a connection to the port.  
Also, the client that is established to the port is  sending messages to what 
it believes is its peer. 
No errors are returned.  
The socket has been in this state for couple of  a days
 
Please advise ,
 
Thanks for your time and inputs
 
Thanks

 
_______________________________________________
ILUGC Mailing List:
http://www.ae.iitm.ac.in/mailman/listinfo/ilugc

Reply via email to