【发布时间】:2019-05-04 02:48:15
【问题描述】:
当您使用 Python 'socket' 模块设置一个简单的 TCP 侦听套接字时,所涉及的不同步骤是什么?
我说的代码是这样的:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 50000))
s.listen(1)
conn, addr = s.accept()
s = ... 看起来很简单 - 您表达了创建 ipv4 TCP 套接字的意图,但尚未执行任何操作。
我很好奇的是:
- 绑定到套接字而不监听是什么意思?
- 如何使用
listen(n)限制未接受的连接数?- 如果你有listen(1),你正在处理你接受的第一个连接,第二个客户端尝试连接,第二个客户端是否在等待SYN-ACK?还是发生了 3 次握手,他正在等待实际数据?
- 如果第三个客户端尝试连接会发生什么 - 他会立即获得 TCP RST 吗?
- 在这里设置不接受的连接数是否会在内核中设置一些选项来指示它应该接受多少连接?还是这一切都在 Python 中处理?
- 你怎么能在不接受的情况下倾听?接受连接是什么意思?
我遇到的每篇文章似乎都假设这些步骤对每个人都有意义,而没有解释每个人的具体作用。他们只是使用通用术语,例如
listen() 开始监听连接
bind() 绑定到套接字
accept() 只接受连接
通过在定义中使用该词来定义一个词是一种解释某事的愚蠢方式。
【问题讨论】: