当前位置: 首页 > 面试题库 >

TCP保持活动断开连接时会出现什么套接字错误?

喻子航
2023-03-14
问题内容

我有一组具有保持活动状态的TCP套接字(间隔1分钟),由select(2)
循环(选择读取)控制。

  • select(2)如果集合中的一个套接字发生了保持活动超时,是否会返回错误?
  • 哪个错误会read(2)返回?

问题答案:
  • select()如果为其选择的其中一个套接字发出了错误信号,则它本身不会返回错误。[实际上,API无法以这种方式指示每个套接字的错误,因为两个不同的套接字可能在的一次调用中就各自获取挂起的错误select()。哪一个会select()回来?]
  • 在循环的每次迭代之后select(),您改而使用FD_ISSET宏read()在每个标记为可读的套接字上尝试。
  • 每当套接字设置了未决的错误集时,都会发信号通知其读取事件(和写入事件)并select()返回,从而使您可以立即拾取由于保持活动状态而导致的超时错误。请注意,选择标记要读取的套接字并不表示有数据要读取,只是读取尝试不会被阻止。如果套接字有未决错误要检索,则读取不会阻塞。无论read(2)write(2)第一甚至试图以处理任何数据之前检索套接字上任何挂起的错误。

当对O_NONBLOCK清除的输入函数的调用不会阻塞时,无论该函数是否成功传输数据,都应认为描述符已准备就绪,可以读取。(该函数可能返回数据,文件结尾指示或一个错误,表明该文件已被阻止,并且在每种情况下,描述符都应视为可以读取。)[
POSIX:select() ]

  • 最后,返回什么错误?至关重要的是,这取决于保持连接失败的方式。ETIMEDOUT如果另一端完全消失,您会得到的。如果发生数据包传递错误,您将转而通过(因此,如果保持活动的数据包收到ICMP错误回复,例如“主机不可达”,则将已EHOSTUNREACH传递)。[有关这些情况的更多详细信息,请参见Stevens,“ Unix网络编程,第1卷”。]


 类似资料:
  • 我正在创建一个客户端服务器应用程序。服务器已经设计好,等待从客户端连接。现在在客户机部分中,我希望在应用程序的整个生命周期中保持连接活动,并且只有当主客户机应用程序关闭或关闭或者服务器关闭它时,连接才会关闭。 在处理程序中我有:

  • 我注意到netstat的套接字是打开的: 这是意料之中的行为吗?我是否需要显式地将连接头值设置为close以防止这种情况发生?

  • 由于失去了与Azure EventHub的连接,我需要将spring-cloud-stream Kafka套接字配置为活动状态。根据推荐页面https://github.com/azure/azure-event-hubs-for-kafka/blob/master/configuration.md ,我需要将设置为true,但在spring-cloud-stream中找不到要设置的配置

  • 在套接字最终接受另一端消失的情况下,什么指定了这个超时?是操作系统(Ubuntu 11.04),还是来自TCP/IP规范,还是套接字配置选项?

  • 我想检查一下我的客户是否断开了连接。根据我的研究,一种可能的方式是我可以继续给客户写信。如果客户端未能接收到消息,则表示已断开连接。我向相应的客户端发送消息“Checking Connection:Client”clientNo。 我将clientNo 1连接到服务器,它接收 客户1 但是当我将另一个客户端连接到服务器时,我的clientNo1停止接收来自服务器的消息,我的clientNo2现在将

  • 我有以下关于连接和TCP保持活动状态的查询: 对于TCP连接,TCP保持活动状态是强制性吗? 保持活动状态的持续时间是固定的还是可配置的? 假设“保持活动”间隔为每15秒一次,那么“保持活动”是始终每15秒发送一次,还是仅在15秒内未发送应用程序数据时才发送? 服务器(通过TCP与客户机连接)如何判断与客户机的连接是否完整?是否可以使用TCP keepalive完成?在这种情况下,是否是服务器需要