Tag: suse

为什么服务器在客户端应用程序处于STOPPED状态后等待客户端?

这个问题是对此前提出的问题 的扩展 : 我用以下参数实现了jxh给出的解决方案 : SO_KEEPALIVE = Enabled TCP_KEEPIDLE = 120 secs TCP_KEEPINTVL = 75 secs TCP_KEEPCNT = 1 那为什么服务器仍然等待客户端响应? 我也在互联网上发现了这一点 kill 实际上将SIGTERM发送到给定进程。 所以我在“杀死”telnet应用程序后使用了ps -o pid,cmd,state命令。 我看到telnet进程仍然存在,但process state = T ,即它处于STOPPED状态 PS:我对Linux信号知之甚少,请考虑一下。

如何使用recv()检测客户端是否仍然连接(而不是挂起)?

我在SuSE Linux Enterprise Server 12.3(x86_64)上用C编写了一个多客户端服务器程序,我每个客户端使用一个线程来接收数据。 我的问题是: 我使用一个终端来运行服务器,并使用其他几个终端telnet到我的服务器(作为客户端)。 我已经在服务器中使用recv()来从客户端接收数据,我还应用了recv()返回值的检查,即错误在-1 ; Conn。在0和正常操作时关闭。 我没有在recv()使用任何标志。 如果我通常使用Ctrl+]关闭telnet会话(即断开客户端)并close ,我的程序工作正常,但如果我使用kill 强制终止客户端,那么我的服务器无法检测到连接丢失。 如何解决? 约束:我不想在客户端放置条件,我只想在服务器端解决此问题。