sleep 1.1
 
        ip netns pids "${ns}" | xargs --no-run-if-empty kill -SIGUSR1 &>/dev/null
+
+       for _ in $(seq 10); do
+               [ -z "$(ip netns pids "${ns}")" ] && break
+               sleep 0.1
+       done
 }
 
 cleanup()
        exit $ksft_skip
 fi
 
+get_msk_inuse()
+{
+       ip netns exec $ns cat /proc/net/protocols | awk '$1~/^MPTCP$/{print $3}'
+}
+
 __chk_nr()
 {
-       local condition="$1"
+       local command="$1"
        local expected=$2
        local msg nr
 
        shift 2
        msg=$*
-       nr=$(ss -inmHMN $ns | $condition)
+       nr=$(eval $command)
 
        printf "%-50s" "$msg"
        if [ $nr != $expected ]; then
        test_cnt=$((test_cnt+1))
 }
 
+__chk_msk_nr()
+{
+       local condition=$1
+       shift 1
+
+       __chk_nr "ss -inmHMN $ns | $condition" $*
+}
+
 chk_msk_nr()
 {
-       __chk_nr "grep -c token:" $*
+       __chk_msk_nr "grep -c token:" $*
 }
 
 wait_msk_nr()
 
 chk_msk_fallback_nr()
 {
-               __chk_nr "grep -c fallback" $*
+               __chk_msk_nr "grep -c fallback" $*
 }
 
 chk_msk_remote_key_nr()
 {
-               __chk_nr "grep -c remote_key" $*
+               __chk_msk_nr "grep -c remote_key" $*
 }
 
 __chk_listen()
        nr=$(ss -Ml $filter | wc -l)
 }
 
+chk_msk_inuse()
+{
+       local expected=$1
+       local listen_nr
+
+       shift 1
+
+       listen_nr=$(ss -N "${ns}" -Ml | grep -c LISTEN)
+       expected=$((expected + listen_nr))
+
+       for _ in $(seq 10); do
+               if [ $(get_msk_inuse) -eq $expected ];then
+                       break
+               fi
+               sleep 0.1
+       done
+
+       __chk_nr get_msk_inuse $expected $*
+}
+
 # $1: ns, $2: port
 wait_local_port_listen()
 {
 chk_msk_nr 2 "after MPC handshake "
 chk_msk_remote_key_nr 2 "....chk remote_key"
 chk_msk_fallback_nr 0 "....chk no fallback"
+chk_msk_inuse 2 "....chk 2 msk in use"
 flush_pids
 
+chk_msk_inuse 0 "....chk 0 msk in use after flush"
 
 echo "a" | \
        timeout ${timeout_test} \
                                127.0.0.1 >/dev/null &
 wait_connected $ns 10001
 chk_msk_fallback_nr 1 "check fallback"
+chk_msk_inuse 1 "....chk 1 msk in use"
 flush_pids
 
+chk_msk_inuse 0 "....chk 0 msk in use after flush"
+
 NR_CLIENTS=100
 for I in `seq 1 $NR_CLIENTS`; do
        echo "a" | \
 done
 
 wait_msk_nr $((NR_CLIENTS*2)) "many msk socket present"
+chk_msk_inuse $((NR_CLIENTS*2)) "....chk many msk in use"
 flush_pids
 
+chk_msk_inuse 0 "....chk 0 msk in use after flush"
+
 exit $ret