Current port selection algorithm is bound to have port clashes. To eliminate clashes, let server pick an unused port and report it on stdout. Signed-off-by: Tahsin Erdogan <tahsin@xxxxxxxxxx> --- src/locktest.c | 16 +++++++++++++++- tests/generic/131 | 17 +++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/locktest.c b/src/locktest.c index adf8ce0..eab48e2 100644 --- a/src/locktest.c +++ b/src/locktest.c @@ -95,7 +95,7 @@ static char *filename = 0; static int debug = 0; static int server = 1; static int maxio = 8192; -static int port = 7890; +static int port = 0; static int testnumber = -1; static int saved_errno = 0; @@ -899,6 +899,20 @@ main(int argc, char *argv[]) /*NOTREACHED*/ } + if (port == 0) { + socklen_t addr_len = sizeof(myAddr); + + if (getsockname(s_fd, &myAddr, &addr_len)) { + perror("getsockname"); + exit(1); + } + + port = ntohs(myAddr.sin_port); + } + + printf("server port: %d\n", port); + fflush(stdout); + c_fd = accept(s_fd, NULL, NULL); if (c_fd == INVALID_SOCKET) { perror("accept"); diff --git a/tests/generic/131 b/tests/generic/131 index 3bcb0d1..d64ba55 100755 --- a/tests/generic/131 +++ b/tests/generic/131 @@ -49,21 +49,18 @@ _require_test_fcntl_advisory_locks TESTFILE=$TEST_DIR/lock_file -# Grab a port which is hopefully unused -if [ $$ -gt 1024 -a $$ -lt 32000 ]; then - PORT=$$ -elif [ $$ -lt 1024 ]; then - PORT=$(($$+1024)) -elif [ $$ -gt 32000 ]; then - PORT=$(($$%30000+1024)) -fi - # Start the server -src/locktest -p $PORT $TESTFILE 2>&1 > $TEST_DIR/server.out & +src/locktest $TESTFILE 2>&1 > $TEST_DIR/server.out & locktest_pid1=$! sleep 1 +PORT=$(cat $TEST_DIR/server.out | grep "^server port: " | awk '{print $3}') +if [ -z $PORT ]; then + echo "Could not get server port" + exit 1 +fi + # Start the client src/locktest -p $PORT -h localhost $TESTFILE 2>&1 > $TEST_DIR/client.out locktest_pid2=$! -- 2.8.0.rc3.226.g39d4020 -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html