【发布时间】:2013-02-07 22:18:03
【问题描述】:
我的服务器套接字有问题。我正在制作一个网络服务器并试图从浏览器中填充一个。表单HTML脚本如图:
<html>
<body bgcolor = black text= white>
<FORM method="post" action="/processData.py">
<P>
<LABEL for="firstname">First name: </LABEL>
<INPUT type="text" id="firstname"><BR>
<LABEL for="lastname">Last name: </LABEL>
<INPUT type="text" id="lastname"><BR>
<LABEL for="email">email: </LABEL>
<INPUT type="text" id="email"><BR>
<INPUT type="radio" name="sex" value="Male"> Male<BR>
<INPUT type="radio" name="sex" value="Female"> Female<BR>
<INPUT type="submit" value="Send"> <INPUT type="reset">
</P>
</FORM>
</body>
</html>
当点击“提交”后从浏览器发送 POST 请求时,我试图在终端上打印整个请求。当我在我的 Web 服务器上收到 POST 请求时,套接字会抛出“[Errno 35] 资源暂时不可用”。我没有关闭连接或任何东西,但不知何故我失去了连接。这是我在 python 中用来获取 POST 的代码。
while not recvIsComplete:
rcvdStr = fd.recv( 1024 )
if rcvdStr[0:3] == "GET":
toGET()
elif rcvdStr[0:4] == "POST":
print rcvdStr
知道发生了什么吗?
【问题讨论】:
-
我们需要更多地了解您究竟是如何“制作 Web 服务器”的。但通常,当您尝试从非阻塞套接字读取但没有数据可读取时,您会得到 errno 35 (
EAGAIN)。 (这有点令人困惑,因为在大多数 POSIX 平台上,EWOULDBLOCK: Operation would block与EAGAIN: Resource temporarily available的 errno 相同。) -
另外,我可以猜到错误是在
rcvdStr = fd.recv( 1024 )行上提出的,以及回溯说的内容……但很高兴向我们展示,这样我们就不必猜测了。 -
另外,您可能需要检查
EAGAIN和EWOULDBLOCK是否是您平台上的一些。 (如果您使用的是 Windows,请不要试图回答这个问题,只需说“我使用的是 Windows”。) -
是的,recv(...) 上发生了错误。抱歉,我之前忘记提了。有什么可能的解决方案?