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 <tahsin@google.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
Tahsin Erdogan
2016-06-08 11:52:41 -07:00
committed by Eryu Guan
parent 795ea36a18
commit b936f63c27
2 changed files with 22 additions and 11 deletions
+15 -1
View File
@@ -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");
+7 -10
View File
@@ -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=$!