考虑我在套接字编程方面的新手。
假设我使用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报告的结果。也就是说,如何确定外部主机已关闭连接?
答案 0 :(得分:2)
我不能代表Perl,但在C套接字API中:
read()
和recv()
在对等关闭连接时返回零,并且您已读取他之前发送的所有数据。send()
和write()
将最终返回-1 errno
= ECONNRESET
。没有TCP套接字的“状态”,您可以独立于发送或接收来查询,这将为您提供此信息。