【发布时间】:2019-03-05 22:39:55
【问题描述】:
我正在实现这个example,以便在一个简单的回显服务器中使用select。一切正常,客户端发送消息,接收回显并断开连接。
这是我用于客户端的代码:
import socket
ECHOER_PORT = 10000
if __name__ == '__main__':
sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockfd.connect(('localhost', ECHOER_PORT))
msg = input('Message: ').encode()
sockfd.send(msg)
response = sockfd.recv(len(msg))
print('Response: {}'.format(response))
sockfd.close()
问题出在服务器上(完整的 gist 代码是 here),在发送回显后,再次调用 select 并且当前客户端(收到回显并断开连接)从选择返回可读可写。
我理解为什么它被返回为可读,因为根据文章:
没有可用数据的可读套接字来自具有 已断开连接,并且流已准备好关闭。
但我的问题是为什么 return 也是可写的?
【问题讨论】:
标签: python sockets select network-programming