我们通过python验证
当套接字处于监听状态时,Recv-Q表示未被accept的连接数
当套接字处于监听状态时,Send-Q表示listen backlog值
环境
Ubuntu虚拟机(5.3.0-51-generic)的IP192.168.233.130
宿主机mac的IP192.168.0.100
在虚拟机中运行服务端,然后在宿主机上连接服务端
监听端口在8080,可以使用
ufw allow 8080
开启端口
首先看下服务端代码server.py
#! /usr/bin/python3
import socket
import sys
import time
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.233.130'
port = 8080
server.bind((host, port))
server.listen(5) # 设置backlog=5
while True:
print("等待客户端连接")
time.sleep(1000000) # 让线程休眠,不让执行下面的accept,方便我们观察现象
cli,addr = server.accept()
print("连接地址: %s" % str(addr))
cli.send("欢迎访问服务器".encode('utf-8'))
cli.close()
通过
./server.py
运行服务端
image.png通过
ss -antlp
查看到Send-Q 的值等于5,这个值也是我们在代码中设置的,在监听状态下它表示listen backlog值.
然后我们在宿主机通过telnet连接服务端.
image.png发起了三次连接
image.png再执行ss -antlp 命令,我们发现Recv-Q的值等于了3,表示有3个客户端连接到服务器,而且这三个客户端没有被accept
的确服务端没有accept,因为这个时候我们的代码通过time.sleep()让线程休眠了.
网友评论