Hi all, some more informations
from FreeSBD src code (/usr/src/sys/netinet/tcp_usrreq.c) FreeBSD 7.1-PRERELEASE
(...)
/*
INP_INFO_WLOCK_ASSERT(&tcbinfo);
INP_WLOCK_ASSERT(inp);
if (inp->inp_lport == 0) {
error = in_pcbbind(inp, (struct sockaddr *)0, td->td_ucred);
if (error)
return error;
}
/*
* Cannot simply call in_pcbconnect, because there might be an
* earlier incarnation of this same connection still in
* TIME_WAIT state, creating an ADDRINUSE error.
*/
laddr = inp->inp_laddr;
lport = inp->inp_lport;
error = in_pcbconnect_setup(inp, nam, &laddr.s_addr, &lport,
&inp->inp_faddr.s_addr, &inp->inp_fport, &oinp, td->td_ucred);
if (error && oinp == NULL)
return error;
if (oinp)
return EADDRINUSE;
inp->inp_laddr = laddr;
in_pcbrehash(inp);
(...)
According to:
http://www.madore.org/~david/computers/connect-intr.html
And:
http://kerneltrap.org/mailarchive/freebsd-net/2007/11/27/451121
It seems that it's common problem in FreeBSD (at minimum).
Mabe there should be some sort of connect-retry functionality implemented in this area (f.e try 2-3 times)?
Best regards:
Piotr Rybicki
Received on 2008/12/09 10:52
This archive was generated by hypermail 2.2.0 : 2008/12/09 11:00 CET