为什么我的networking服务器有时只传输部分响应?

我有一个定制的Web服务器代码。 它是使用evnet模块编写的。

当从远程客户端请求时,似乎减less了消息的长度。 但是当我在同一台机器上使用它时,似乎传达了完整的信息。 我无法弄清楚问题的症结所在,也不知道如何诊断。 我使用networking浏览器, curlnc来testing它。 从远程客户端请求时,它从不传送全长消息。

这是我的web服务器的简化版本,仍然存在这个问题。 我正在用Python 2.7.1在Ubuntu 11.04上做这个

在调用send()发送一堆数据之后,您正在关闭套接字。 如果有数据仍然被缓冲,关闭套接字时将被丢弃。

相反,您应该在套接字上调用shutdown(SHUT_WR)来告诉远端您已经完成发送。 这被称为TCP“半关闭”。 作为响应,另一端将关闭它,并且您将收到一个通知,表示套接字不可读。 然后,只有这样,你应该关闭套筒手柄。