--- spread-3.17.2-orig/data_link.c 2004-03-05 01:32:46.000000000 +0100 +++ spread-3.17.2/data_link.c 2008-03-14 09:48:20.000000000 +0100 @@ -90,6 +90,22 @@ } Alarm( DATA_LINK, "DL_init_channel: setting Mcast TTL to %d\n",ttl_val); #endif + + soc_addr.sin_family = AF_INET; + soc_addr.sin_port = 0; + memset(&soc_addr.sin_zero, 0, sizeof(soc_addr.sin_zero)); + if (interface_address == 0) + soc_addr.sin_addr.s_addr= INADDR_ANY; + else + soc_addr.sin_addr.s_addr= htonl(interface_address); + + if(bind( chan, (struct sockaddr *) &soc_addr, + sizeof(soc_addr)) == -1) + { + Alarm( EXIT, "DL_init_channel: bind error (%d): %s for port %d (ignored, tried to assign random port), with sockaddr (%d.%d.%d.%d: %d) probably already running \n", sock_errno, sock_strerror(sock_errno), port, IP1(soc_addr.sin_addr.s_addr),IP2(soc_addr.sin_addr.s_addr),IP3(soc_addr.sin_addr.s_addr),IP4(soc_addr.sin_addr.s_addr), soc_addr.sin_port ); + } + Alarm( DATA_LINK, "DL_init_channel: bind for send_channel for port %d (assigned random port) with chan %d ok\n", + port, chan); } if ( channel_type & RECV_CHANNEL )