python、perl套接字在从中读取数据时的阻塞差异?

python、perl套接字在从中读取数据时的阻塞差异?,python,sockets,Python,Sockets,在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 client\u fd.readlin

在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

client\u fd.readlines()
正在阻塞,除非我在浏览器中终止请求。有没有办法绕过这个问题?为什么perl中的
没有阻塞?

您的(更新的)perl示例正在从客户端读取一行代码;Python one从客户端读取所有输入行,直到套接字关闭。客户端没有关闭套接字,因为它希望能够执行HTTP keepalive。您应该使用
readline
而不是
readlines
来读取单行输入。或者,如果你真的想说HTTP,你应该使用一个专门为它设计的模块。

默认情况下Perl模块应该是阻塞的。你为什么说它不是?@hobbs我在电脑上运行它,末尾有一个print语句,通过浏览器访问它,它打印出$line而没有阻塞。使用PythonOne,我将在浏览器中终止请求,然后它将在Perl中打印outIn,您可以阅读一行。在Python中,您似乎正在阅读所有的行。@hobbs很抱歉没有弄清楚这个问题。我更新了它注意到
将阻止,直到读取换行符或达到EOF为止。
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