当前位置:  开发笔记 > 编程语言 > 正文

TCP/IP如何报告错误?

如何解决《TCP/IP如何报告错误?》经验,为你挑选了1个好方法。

当数据包传递永久失败时,TCP/IP如何报告错误?我看到的所有Socket.write()API都只是将字节传递给底层TCP/IP输出缓冲区并异步传输数据.如果数据包传递永久失败(即目标主机不再可访问),TCP/IP如何通知开发人员?

任何要求发送方等待远程端确认的协议都会收到错误消息.但是对于发送方不必从目标读取任何字节的协议会发生什么?TCP/IP是否只是默默地失败?也许Socket.close()会返回错误?TCP/IP规范是否说明了这一点?



1> John M..:

TCP/IP是一种可靠的字节流协议.您的所有字节都将到达接收器,否则您将收到错误指示.

错误指示将以闭合插座的形式出现.无论通信模式(发送者是谁),如果无法传递字节,套接字将关闭.

所以问题是,你如何看待套接字关闭?如果你从来没有读过,你最终会在尝试写入已关闭的套接字时遇到错误(我认为使用ECONNRESET错误).

如果您需要在另一个文件句柄上休眠或等待输入,您可能希望在select()调用中等待,其中您将套接字包含在您正在等待的源列表中(即使您从未预料到)收到任何东西).如果select()指示套接字已准备好进行读取调用,则可能会返回-1(我认为使用ECONNRESET).EOF表示有序关闭(另一方执行关闭()或关闭().

如何区分这个错误关闭干净关闭(例如,其他程序退出)?errno值可能足以将错误与有序关闭区分开来.

如果您想要明确指出问题,您可能需要在套接字层之上构建某种应用程序级协议.例如,接收方发送给发送方的短"ack"消息.然后违反更高级别的应用程序协议(发件人没有看到确认)将确认它是一个错误关闭与干净关闭.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有