蟒socket.recv / sendall呼叫阻塞
题
这个职位是不正确的标记“发送”,因为我无法创建新的标签。
我对这个简单的echo服务器一个非常基本的问题。这里有一些代码段。
客户端
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
服务器
while True:
print "Waiting for connection"
(clientSock, address) = serverSock.accept()
print "Entering read loop"
while True:
print "Waiting for data"
data = clientSock.recv(1024)
if not data: break
clientSock.send(data)
clientSock.close()
现在这个作品正常的,当客户机发送一个空串(通过敲击回车键,响应于“输入数据:”),除了,在这种情况下我看到一些死锁肥胖型行为
现在,究竟当用户按下在客户端回发生什么呢?我只能想象,sendall调用阻塞等待一些数据添加到发送缓冲区,导致接收调用反过来阻止。这里发生了什么?
感谢阅读!
解决方案
更多类似的sendall()
调用什么也不做(因为没有要发送的数据),从而对的客户的块等待数据的recv()
电话,但因为没有被发送到服务器时,服务器永远不会发送任何数据返回,因为它也被阻止在其初始recv()
,并且因此这两个过程被阻断。
不隶属于 StackOverflow