【发布时间】:2018-02-23 14:17:05
【问题描述】:
我对socket编程的理解主要来源于这个教程:
CS 50 Software Design and Implementation, Lecture 19, Socket Programming
给定一个 TCP 客户端/服务器模型,其中客户端和服务器在两个不同的系统中运行,并且它们之间有一个代理,假设客户端能够通过代理向服务器发送消息,那么服务器突然变得非-响应(说它已重置)。代理和服务器之间的连接会发生什么情况,如何处理?
我的意思是,我可以使用什么技术来检测此类事件、关闭我的连接并向客户端返回错误消息?
我能想到的一种方法是检查代理中的接收缓冲区,如果一段时间内没有数据,则告诉客户端服务器已关闭。但我认为超时是一种原始方法。套接字编程中是否有任何已知的标准方法或替代方法可用?
【问题讨论】:
-
您是在实现客户端、服务器还是代理?无论哪种方式,TCP 都有一个内置的 keep-alive 心跳,您可以启用它。根据您运行的平台,您可以使用
setsockopt(SOL_SOCKET, SO_KEEPALIVE)或setsockopt(SOL_TCP, TCP_KEEPCNT/TCP_KEEPIDLE/TCP_KEEPINTVL)或WSAIoctl(SIO_KEEPALIVE_VALS)。如果心跳失败,连接就消失了,所以只需关闭它的套接字句柄。 -
"给定 TCP 客户端/服务器模型..." TCP 没有客户端或服务器。客户端/服务器模型是应用层模型。 TCP 在对等主机之间建立连接。
标签: sockets networking network-programming client-server