运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

write(socket,buff,length)会导致崩溃

运维开发网 https://www.qedev.com 2020-07-13 16:57 出处:网络 作者:运维开发网整理
我有一个程序,用于向带有 android的手机发送数据.我们是iamgine //编辑 while(enviado < length) { printf("SEND\n"); r = write(con, buff_enviar+enviado, length-enviado); printf(" OK\n"); if (r > 0) enviado += r;
我有一个程序,用于向带有 android的手机发送数据.我们是iamgine

//编辑

while(enviado < length) {
    printf("SEND\n");
    r = write(con, buff_enviar+enviado, length-enviado);
    printf(" OK\n");
    if (r > 0) enviado += r;
    else if (r == 0) { printf(" * >> Socket cerrado [datos] (%d)\n",r); return r; }
    else if (r == -1) { printf(" * >> Error [datos] (%d)\n",r); return r; }
}

当我离开这个时,我改变buff_enviar值.当我取消手机中的传输时,通过成功执行socket.close(),写入使我的程序无缘无故结束.所以我的程序输出是:

发送

发送

发送

我想这是写错,因为它没有打印好. ERRNO值为61(无数据)

我希望有人之前遇到过这个问题并解决了.

编辑:有时当我取消时,r = -1所以我可以处理错误,但大多数时候它只是终止程序.这就像是随机选择的.我糊涂了 :(

亲切的问候,

劳尔

您正在写入已关闭的套接字,默认情况下会生成“断开管道”信号(SIGPIPE).为了能够从write()中可靠地恢复,您需要通过调用以下方式忽略EPIPE:

signal (SIGPIPE, SIG_IGN);

程序中的某个位置,例如main()中.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消