我对socket编程的了解主要来自本教程:如何使用套接字操作通知有关不响应的TCP服务器?
CS 50 Software Design and Implementation, Lecture 19, Socket Programming
由于在客户端和服务器在两个不同的系统和代理运行的TCP客户机/服务器模型是在它们之间,假设客户端可以通过代理将消息发送到服务器,然后服务器突然变得不响应(说它被重置)。代理和服务器之间的连接会发生什么,以及如何处理?
我的意思是,我可以采用什么技术来检测这样的事件,关闭我的连接,并向客户端返回错误消息?
我能想到的一种方法是检查代理中的接收缓冲区,如果一段时间内没有数据,告诉客户端服务器已关闭。但我认为超时是一种原始的方法。在套接字编程中是否有已知的标准方法或替代方案?
您正在实施客户端,服务器还是代理?无论哪种方式,TCP都有一个可以启用的内置保持活动心跳。根据您运行的平台,您可以使用'setsockopt(SOL_SOCKET,SO_KEEPALIVE)'或'setsockopt(SOL_TCP,TCP_KEEPCNT/TCP_KEEPIDLE/TCP_KEEPINTVL)'或'WSAIoctl(SIO_KEEPALIVE_VALS)'。如果心跳失败,连接消失,所以请关闭您的套接字句柄。 –
“_提供TCP客户端/服务器模型..._”TCP没有客户端或服务器。客户机/服务器模型是一个应用程序层模型。 TCP建立对等主机之间的连接。 –