gpt4 book ai didi

c - write(socket, buff, length) 使崩溃

转载 作者:太空狗 更新时间:2023-10-29 15:48:59 27 4
gpt4 key购买 nike

我有一个程序可以将数据发送到带有 android 的手机。让我们想象一下

//编辑

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(),write 使我的程序无故结束。所以我的程序的输出是:

发送
好的
发送
好的
发送

我猜这是 write 错误,因为它没有 printf OK。 ERRNO值为61(无可用数据)

希望有人遇到过这个问题并解决了。

编辑:有时当我取消时,r = -1 这样我就可以处理错误,但大多数时候它只是终止程序。就像随机选择的一样。我很困惑:(

亲切的问候,劳尔

最佳答案

您正在写入一个关闭的套接字,该套接字默认会生成“管道损坏”信号 (SIGPIPE)。为了能够从 write() 可靠地恢复,您需要通过调用忽略 EPIPE:

signal (SIGPIPE, SIG_IGN);

在你的程序中的某处,例如在 main() 中。

关于c - write(socket, buff, length) 使崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com