0

在 Perl 中,我可以做到

socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
bind(SERVER, $my_addr);
listen(SERVER, SOMAXCONN);
$client_address = accept(CLIENT, SERVER);
$line = <CLIENT>;  # Read until newline or EOF
print $line

当通过浏览器访问它时$line = <CLIENT>将返回并打印而不会阻塞。如果我在 python 中尝试相同的操作,请执行以下操作

from socket import *
host = ""
port = 9000
address = (host, port)
server = socket(AF_INET, SOCK_STREAM)
server.bind(address)
server.listen(SOMAXCONN)
client, addr = server.accept()
client_fd = client.makefile()
data = client_fd.readlines()
print data

client_fd.readlines()除非我在浏览器中终止请求,否则会阻塞。有没有办法解决这个问题?为什么<CLIENT>在 perl 中没有阻塞?

4

1 回答 1

1

您的(更新的)Perl 示例正在从客户端读取一行Python 正在读取来自客户端的所有输入行,直到套接字关闭。并且客户端不会关闭套接字,因为它希望能够进行 HTTP keepalive。您应该使用readline而不是readlines读取单行输入。或者,如果您真的想使用 HTTP,您应该使用为此而设计的模块。

于 2013-07-11T01:39:11.463 回答