我有一组具有保持活动状态的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完成?在这种情况下,是否是服务器需要