请解释一下套接字缓冲区

1 投票
3 回答
1006 浏览
提问于 2025-04-15 13:37

我在找关于套接字编程的例子时,发现了这个脚本:http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py

在阅读这个脚本时,我看到这一行:
listenSocket.listen(5)

我理解的是,这行代码从缓冲区读取5个字节,然后进行一些操作……

但是,如果对方发送了超过5个字节,会发生什么呢?

在这个脚本的其他地方,它会检查输入是否符合4个命令,并查看字符串中是否有\r\n。像“look”这样的命令加上\r\n,不是超过5个字节吗?

Alan

3 个回答

0

传给 listenSocket.listen 的参数 5 不是用来表示要读取或缓冲的字节数,而是指 backlog

socket.listen(backlog)

这个方法是用来监听连接到这个套接字的请求。backlog 参数指定了可以排队的最大连接数,至少要设置为 1;最大值依赖于系统(通常是 5)。

0

这可能会帮助你理解代码:http://www.amk.ca/python/howto/sockets/

13

下面的内容适用于一般的套接字,但它可以帮助你理解如何在Python中使用套接字。

socket.listen() 是在 服务器 套接字上使用的,用来监听进来的连接请求。

传给 listen 的参数叫做 backlog,它的意思是这个套接字最多可以接受多少个连接,并把这些连接放在一个等待的缓冲区,直到你完成对 accept() 的调用。这个参数适用于在你调用 listen() 和完成对应的 accept() 调用之间,正在等待连接到你服务器套接字的连接。

所以,在你的例子中,你把 backlog 设置为 5 个连接。

注意:如果你把 backlog 设置为 5 个连接,那么第六个、第七个等后续的连接请求会被拒绝,连接的套接字会收到一个 连接错误 的消息(类似于“主机主动拒绝连接”的提示)。

撰写回答