TCP / IP套接字如何报告外部主机已关闭连接?

时间:2014-01-19 00:31:20

标签: tcp-ip

考虑我在套接字编程方面的新手。

假设我使用telnet连接到网络服务器:

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /
(blah blah blah)
connection closed by foreign host.

我的问题是写一个应用程序来做同样的事情。基本上,我写的是Perl。但我认为这不是Perl特有的问题。

在Perl中,我使用IO :: Socket :: INET创建一个套接字,它扩展了IO :: Handle。本质上,套接字具有与文件句柄相同的属性,我理解的是unix中“套接字”的定义 - 与文件句柄无法区分。

我的应用程序旨在模仿上述的telnet功能。我打开套接字并写入字符串“GET / \ n \ n”,并得到完全相同的结果 - 除了“外部主机关闭的连接”。实际上,所有套接字属性都没有改变。

我的问题是:在Perl或其他方面,我如何查询套接字属性以确定通过telnet报告的结果。也就是说,如何确定外部主机已关闭连接?

1 个答案:

答案 0 :(得分:2)

我不能代表Perl,但在C套接字API中:

  • read()recv()在对等关闭连接时返回零,并且您已读取他之前发送的所有数据。
  • 如果您继续写入已被对等方关闭的连接,
  • send()write()将最终返回-1 errno = ECONNRESET

没有TCP套接字的“状态”,您可以独立于发送或接收来查询,这将为您提供此信息。