From b936f63c2793c4bf5b6ac8fbf9b3a28522a7111f Mon Sep 17 00:00:00 2001 From: Tahsin Erdogan Date: Wed, 8 Jun 2016 11:52:41 -0700 Subject: [PATCH] generic/131: dynamically allocate tcp listen port to avoid port clashes 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 Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- 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 adf8ce05..eab48e2a 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 3bcb0d16..d64ba550 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.39.5