补全:用 select 挑就绪的

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:上面的内存版 TCP。)

贯穿全条的内存版 TCP(判题机不联网;接口和真 socket 一样,真机上把它换成 socket.socket() 就是真的):

net = Net()
lis = listen(net, 9000)      服务端开监听
cli = connect(net, 9000)     客户端连上——交回客户端这一头;服务端那一头进 accept 队列
srv = lis.accept()           服务端领一条新连接(一个新端点,lis 继续监听)
cli.sendall(b"...") / srv.recv(n)   send 把字节追加进对面的收缓冲;recv 从自己的收缓冲拿最多 n 字节——拿到多少算多少,不保证是「一条消息」
x.close()                    关了之后,对面 recv 交回 b"";收缓冲空又没关时 recv 抛 BlockingIOError(真 socket 在这儿会阻塞等)

补全 handle_ready(srvs):找出收缓冲里有数据的那些连接,各把数据原样回去,交回处理过的下标列表。五条连接,第 0、2、4 条发了数据。

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论