The Question is:
I am experiencing a problem with TCP/IP, after
upgrading to OpenVMS V7.2-1, and TCP/IP 5.0.
We were able to run multiple UDP - multicast
receivers on the same node (with VMS 7.1 and UCX 4.2). This used to be very
we have several team-members working separately
with the same multicast feed.
Once we upgraded to Open VMS 7.2 and TCP/IP 5.0
we are not able to run multiple receivers on the same IP-Addr - port.
The $QIO returns SS$_DUPLNAM in the I/O status block.
1. Assign channel to UCX$DEVICE - success
2. create socket type (IO$_SETMODE
protocol: UCX$C_UDP, type: INET_PROTYP$C_DGRAM, family: AF_INET) - success
3. set socket options: UCX$M_REUSEADDR - IO$_SETMODE - success.
4. Trying to bind the socket..... fails:
htonl( INADDR_ANY );
htons( atoi( &port ) ); /* mcast port */
,IO$_SETMODE /* func.v */
,&iosb /* iosb.r | 0 */
,0, 0 /* astadr, astprm: UNUSED */
,0, 0 /* p1, p2 UNUSED */
,&adrs /* p3.d Socket bind parameter */
,0, 0, 0 /* p4, p5, p6 UNUSED */
The above $QIO returns success in the return status, but the condition value in
the IOSB is SS$_DUPLNAM ... when there is already a receiver job running on
that I/P Addr and port, from another user account).
One more interesting observation:
If we try to create a telnet session using telnet/create_session.... fails with
EF101> telnet /create_session ef 2024 12
%TELNET-E-INTERNAL, Internal error: Failed to set device characteristics
-SYSTEM-F-DUPLNAM, duplicate name
Any work-arounds? Suggestions??
Thanks in advance!
The Answer is :
First, please move to TCP/IP Services V5.0A.
You will want to set the SO_REUSEADDR (or the prefered SO_REUSEPORT)
socket option before attempting to bind to that port. During typical
debugging -- particularly with frequent server stops and restarts --
this technique can avoid having to wait for the timout before you
reconnect. You may also find that the order that the parameters to
the $qio are processed is not necessarily what you might want, and you
really want the REUSEADDR (or REUSEPORT) option to be processed first
for this case -- and this means you need to specify it via a separate
$qio call. For details on this ordering and on the multiple $qio calls,
please see REUSEADDR in the file:
TCPIP$EXAMPLES:TCPIP$TCP_SERVER_QIO.C ! V5+
UCX$EXAMPLES:UCX$TCP_SERVER_QIO.C ! <V5
The bit value for TCPIP$C_REUSEPORT is 0x200, and the definition for
this bit is expected to be included in the V5.1 and later definition
files. This option is present in V5.0 and later.
The reported "last listener" behaviour is expected and normal for
unicast (and for multicast) addresses.
Then, if this re-sequencing fails, please contact the Compaq Customer