请解释一下套接字缓冲区
我在找关于套接字编程的例子时,发现了这个脚本:http://stacklessexamples.googlecode.com/svn/trunk/examples/networking/mud.py
在阅读这个脚本时,我看到这一行:
listenSocket.listen(5)
我理解的是,这行代码从缓冲区读取5个字节,然后进行一些操作……
但是,如果对方发送了超过5个字节,会发生什么呢?
在这个脚本的其他地方,它会检查输入是否符合4个命令,并查看字符串中是否有\r\n。像“look”这样的命令加上\r\n,不是超过5个字节吗?
Alan
3 个回答
传给 listenSocket.listen
的参数 5
不是用来表示要读取或缓冲的字节数,而是指 backlog
:
这个方法是用来监听连接到这个套接字的请求。
backlog
参数指定了可以排队的最大连接数,至少要设置为 1;最大值依赖于系统(通常是 5)。
这可能会帮助你理解代码:http://www.amk.ca/python/howto/sockets/
下面的内容适用于一般的套接字,但它可以帮助你理解如何在Python中使用套接字。
socket.listen() 是在 服务器 套接字上使用的,用来监听进来的连接请求。
传给 listen 的参数叫做 backlog,它的意思是这个套接字最多可以接受多少个连接,并把这些连接放在一个等待的缓冲区,直到你完成对 accept() 的调用。这个参数适用于在你调用 listen() 和完成对应的 accept() 调用之间,正在等待连接到你服务器套接字的连接。
所以,在你的例子中,你把 backlog 设置为 5 个连接。
注意:如果你把 backlog 设置为 5 个连接,那么第六个、第七个等后续的连接请求会被拒绝,连接的套接字会收到一个 连接错误 的消息(类似于“主机主动拒绝连接”的提示)。