在我的代码我写的是这样的:当python socket.sendall成功返回时,它意味着什么?
try:
s.sendall(data)
except Exception as e:
print e
现在,我可以假设,如果没有通过sendall在插槽(其内核)的另一端确实收到“数据”抛出的任何异常?如果不是这样,那意味着我需要发送一个应用程序,这对我来说似乎不合理。
如果我可以假设对方的内核确实收到'数据',那么这意味着'sendall'只有在它看到tcp ack时才会返回所有输入'data'的字节,但我看不到相反,通过搜索网络,我得到了一种感觉,我不能假设已经收到了答案。
谢谢。我读到了这一点,但我不明白完成发送数据的意义。这是否意味着内核完成了发送或者是否意味着它从服务器获得了一个确认。从查看错误代码,我没有看到任何错误,说我没有得到一个答案。 – Ezra
再次感谢。我解释这一点的方式是循环继续,直到缓冲区为空,直到它收到确认。我也在SO上找到了这个答案,它表示发送并不等待一个确认。 http://stackoverflow.com/questions/8218785/how-can-i-explicitly-wait-for-a-tcp-ack-before-proceeding – Ezra
正确:)相信(*可能是错误的* *)''ACK ''/''NAK''在TCP堆栈中较低。这里我们正在处理TCP AFAIK之上的一个Socket。尝试wiresharking你的数据包流:) –