相关疑难解决方法(0)

如何防止SIGPIPE(或正确处理它们)

我有一个小型服务器程序,它接受TCP或本地UNIX套接字上的连接,读取一个简单的命令,并根据命令发送一个回复.问题是客户端有时可能对答案没兴趣并且提前退出,因此写入该套接字将导致SIGPIPE并使我的服务器崩溃.什么是防止崩溃的最佳做法?有没有办法检查线的另一边是否还在读?(select()似乎在这里不起作用,因为它总是说套接字是可写的).或者我应该用处理程序捕获SIGPIPE并忽略它?

c io signals sigpipe broken-pipe

242
推荐指数
8
解决办法
19万
查看次数

套接字send()卡在C中

我正在尝试连接两台机器,比如机器A和B.我正在尝试从A到B发送TCP消息(单向).在正常情况下,这工作正常.当通信顺畅时,如果B中的插座关闭,A的send()将永久停留.它将进程置于僵尸状态.我在机器A中有阻塞模式的套接字.下面是永远停留的代码.

           if (send (txSock,&txSockbuf,sizeof(sockstruct),0) == -1) {
                printf ("Error in sending the socket Data\n");
                            }
            else {
                printf ("The SENT String is %s \n",sock_buf);
            }
Run Code Online (Sandbox Code Playgroud)

如何找到另一侧插座是否关闭?如果目标套接字关闭,send会返回什么?会选择有用.

c sockets send

4
推荐指数
1
解决办法
1420
查看次数

标签 统计

c ×2

broken-pipe ×1

io ×1

send ×1

signals ×1

sigpipe ×1

sockets ×1