diff -ru openmpi-1.2.orig/ompi/mca/btl/tcp/btl_tcp_component.c openmpi-1.2/ompi/mca/btl/tcp/btl_tcp_component.c --- openmpi-1.2.orig/ompi/mca/btl/tcp/btl_tcp_component.c 2007-01-14 02:39:42.000000000 +0000 +++ openmpi-1.2/ompi/mca/btl/tcp/btl_tcp_component.c 2007-04-20 17:08:17.000000000 +0100 @@ -393,6 +393,9 @@ int flags; struct sockaddr_in inaddr; opal_socklen_t addrlen; + int min_port = 15000; + int max_port = 15999; + int tmp_port; /* create a listen socket for incoming connections */ mca_btl_tcp_component.tcp_listen_sd = socket(AF_INET, SOCK_STREAM, 0); @@ -406,13 +409,30 @@ memset(&inaddr, 0, sizeof(inaddr)); inaddr.sin_family = AF_INET; inaddr.sin_addr.s_addr = INADDR_ANY; +/* inaddr.sin_port = 0; if(bind(mca_btl_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) { BTL_ERROR(("bind() failed with errno=%d", opal_socket_errno)); return OMPI_ERROR; } - +*/ + + tmp_port = min_port; + while (1) { + inaddr.sin_port = htons((unsigned short) tmp_port); + if(bind(mca_btl_tcp_component.tcp_listen_sd, (struct sockaddr *) &inaddr, sizeof(inaddr)) < 0) { + if (tmp_port == max_port) { + BTL_ERROR(("bind() failed with errno=%d", opal_socket_errno)); + return OMPI_ERROR; + } else { + ++tmp_port; + } + } else { + break; + } + } + /* resolve system assignend port */ addrlen = sizeof(struct sockaddr_in); if(getsockname(mca_btl_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, &addrlen) < 0) { diff -ru openmpi-1.2.orig/orte/mca/oob/tcp/oob_tcp.c openmpi-1.2/orte/mca/oob/tcp/oob_tcp.c --- openmpi-1.2.orig/orte/mca/oob/tcp/oob_tcp.c 2007-01-24 18:16:10.000000000 +0000 +++ openmpi-1.2/orte/mca/oob/tcp/oob_tcp.c 2007-04-20 16:50:08.000000000 +0100 @@ -378,6 +378,9 @@ int flags; struct sockaddr_in inaddr; opal_socklen_t addrlen; + int min_port = 15000; + int max_port = 15999; + int tmp_port; /* create a listen socket for incoming connections */ mca_oob_tcp_component.tcp_listen_sd = socket(AF_INET, SOCK_STREAM, 0); @@ -394,6 +397,7 @@ memset(&inaddr, 0, sizeof(inaddr)); inaddr.sin_family = AF_INET; inaddr.sin_addr.s_addr = INADDR_ANY; +/* inaddr.sin_port = 0; if(bind(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) { @@ -401,6 +405,23 @@ strerror(opal_socket_errno), opal_socket_errno); return ORTE_ERROR; } +*/ + + tmp_port = min_port; + while (1) { + inaddr.sin_port = htons((unsigned short) tmp_port); + if(bind(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr *) &inaddr, sizeof(inaddr)) < 0) { + if (tmp_port == max_port) { + opal_output(0,"mca_oob_tcp_create_listen: bind() failed: %s (%d)", + strerror(opal_socket_errno), opal_socket_errno); + return ORTE_ERROR; + } else { + ++tmp_port; + } + } else { + break; + } + } /* resolve system assigned port */ addrlen = sizeof(struct sockaddr_in); @@ -589,6 +610,9 @@ struct sockaddr_in inaddr; opal_socklen_t addrlen; int flags; + int min_port = 15000; + int max_port = 15999; + int tmp_port; /* create a listen socket for incoming connections */ mca_oob_tcp_component.tcp_listen_sd = socket(AF_INET, SOCK_STREAM, 0); @@ -605,6 +629,7 @@ memset(&inaddr, 0, sizeof(inaddr)); inaddr.sin_family = AF_INET; inaddr.sin_addr.s_addr = INADDR_ANY; +/* inaddr.sin_port = 0; if(bind(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) { @@ -612,6 +637,23 @@ strerror(opal_socket_errno), opal_socket_errno); return ORTE_ERROR; } +*/ + + tmp_port = min_port; + while (1) { + inaddr.sin_port = htons((unsigned short) tmp_port); + if(bind(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr *) &inaddr, sizeof(inaddr)) < 0) { + if (tmp_port == max_port) { + opal_output(0,"mca_oob_tcp_create_listen: bind() failed: %s (%d)", + strerror(opal_socket_errno), opal_socket_errno); + return ORTE_ERROR; + } else { + ++tmp_port; + } + } else { + break; + } + } /* resolve system assigned port */ addrlen = sizeof(struct sockaddr_in);