On Jan 13 00:36, Mark Geisert wrote:
This report is based on a series of recent list emails with Subject: lines
"RPC clnt_create() adress already in use" which date back to last September
but are unfortunately not chained together... They contain a discussion
I've been having with OP Raimund Paulus.
I believe I've distilled the issue(s) down as far as I can. A
self-contained STC is included at the end of this email.
On the latest 64-bit Cygwin, running the STC shows:
~ netstat -an|grep :111
TCP 0.0.0.0:111 0.0.0.0:0 LISTENING
TCP [::]:111 [::]:0 LISTENING
UDP 0.0.0.0:111 *:*
UDP [::]:111 *:*
~ ./bindtest
1st socket is 3
1st bind OK
1st connect OK
2nd socket is 3
2nd bind OK
2nd connect: Address already in use
~ ./bindtest
1st socket is 3
1st bind OK
1st connect: Address already in use
On Fedora 27, running the same STC shows:
[mark@lux ~]$ netstat -an|grep :111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp6 0 0 :::111 :::*
[mark@lux ~]$ ./bindtest
1st socket is 3
1st bind OK
1st connect OK
2nd socket is 3
2nd bind OK
2nd connect OK
I can't reproduce this:
$ uname -sr
Linux 4.14.13-300.fc27.x86_64
$ netstat -an|grep :111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp6 0 0 :::111 :::*
$ ./bindtest
1st socket is 3
1st bind OK
1st connect OK
2nd socket is 3
2nd bind OK
2nd connect: Cannot assign requested address
I tried this a couple of times even as root, just to be sure, but the
result is invariable "2nd connect: Cannot assign requested address".
The error message is different from Cygwin, but the overall behaviour is
the same for me, and it matches the comment I wrote in cygwin_setsockopt
back in 2009 and 2011.
I'm very puzzled that it works for you. As I wrote in my comment, a
complete duplicate of a local TCP address is not allowed, regardless of
SO_REUSEADDR.
If I may quote Mr. Network himself, the late W. R. Stevens, "UNIX
Network Programming, Networking APIs: Sockets and XTI", Volume 1, 2nd
Edition. Section 7.5:
"With TCP we are never able to start multiple servers that bind the
same IP address and the same port: a 'complete duplicate binding'.
That is, we cannot start one server that binds 198.69.10.2 port 80
and start another that also binds 198.69.10.2 port 80, even if we set
the SO_REUSEADDR soocket option for the second server."