Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送套接字c ctrl+;c行为_C_Sockets - Fatal编程技术网

发送套接字c ctrl+;c行为

发送套接字c ctrl+;c行为,c,sockets,C,Sockets,我正在编写一个基于服务器和各种客户端的应用程序,但是我对send命令有一个问题。 每当我在客户端执行ctrl+c时,send操作就会终止正在运行的线程和进程(为了有多个客户端,我将一个线程设置为哪个线程) 如果客户端正确结束(执行关闭套接字),服务器不会死掉,但是当我在客户端上使用ctrl+c组合时,两者都会退出 如何防止send命令出现这种行为 提前感谢退房。您需要捕获并处理CTRL+C的信号,即SIGINT(终端中断信号)。为了关闭套接字连接并在CTRL-C上正确终止客户端程序,您可能需要为

我正在编写一个基于服务器和各种客户端的应用程序,但是我对send命令有一个问题。 每当我在客户端执行ctrl+c时,send操作就会终止正在运行的线程和进程(为了有多个客户端,我将一个线程设置为哪个线程)

如果客户端正确结束(执行关闭套接字),服务器不会死掉,但是当我在客户端上使用ctrl+c组合时,两者都会退出

如何防止send命令出现这种行为


提前感谢退房。您需要捕获并处理CTRL+C的信号,即SIGINT(终端中断信号)。

为了关闭套接字连接并在CTRL-C上正确终止客户端程序,您可能需要为其提供适当的信号处理程序。这是通过使用或优选地使用功能来实现的

这个问题及其答案可能会引起兴趣:


在服务器程序上,应该检查涉及套接字的每个函数的错误,例如或/通过检查函数的返回值。如果函数的返回值指示错误(通常为-1),请查看。的值应提供有关错误性质的一些指示,并允许正确处理错误案例。这将帮助您更好地处理当客户端应用程序意外终止时连接丢失的情况。

让我总结一下我认为您的问题是:每当您按下ctrl+c关闭客户端时,服务器都会退出。您希望以一种服务器不会像上面那样崩溃的方式来处理这种行为。如果这是真的,请继续读下去,我想我可能能够阐明一些实际问题,它与使用(或不使用)适当的信号句柄没有多大关系

当您使用ctrl+c关闭客户机时,操作系统将停止客户机进程并关闭它打开的所有套接字。作为其中的一部分,FIN将被发送到服务器

请检查您的代码。我相信您编写代码的方式会使它在有关客户端的套接字的read()调用中被阻塞。现在,当上面发送的FIN到达服务器端套接字时,该读取返回值为0

如果您的代码没有检查这种情况,并试图将某些内容写回客户端,最终(我跳过了中间发生的几个步骤),它将收到一个SIGPIPE。这将导致服务器崩溃

如果上述情况属实,您有两条出路: 1.检查read()是否返回0并正常继续。 2.为SIGPIPE安装一个信号处理器

顺便说一句,我更喜欢第一种方法