gpt4 book ai didi

c - 套接字 :client waiting even after recieving last byte

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:43 24 4
gpt4 key购买 nike

我有 C 语言的客户端/服务器程序,通过它我可以将文件从服务器传输到客户端。

但客户端甚至在收到文件的最后一个字节后仍在等待 recv。只有当我杀死它或服务器被我杀死时,客户端才会终止。但是服务器必须处于循环中,因为它必须处理其他客户端的请求。

我在服务器中使用 fork() 来处理每个客户端的请求。在满足客户端的请求后,我将退出子进程,但客户端仅在整个服务器程序被终止时才终止。

为什么当服务器的子进程退出时客户端不终止?

可以看到服务器代码here和客户代码 here .

最佳答案

您应该确保在发送完所有数据后在服务器进程中调用 shutdown(s, SHUT_WR),然后调用 close(s)

调用 shutdown() 告诉 TCP 层没有更多数据要发送。

TBH,我不太清楚为什么单独调用 close() 也不能实现这一点。

编辑 - 我现在已经弄明白了 - 这是因为此时在您的代码中,父级还打开了套接字,因此它不会被内核拆除。如果在 fork() 之后添加一些额外的逻辑:

if (p > 0) {
close(connected);
}

那么您的代码无需调用 shutdown() 即可运行。

如果您使用我在 my answer 中发送的代码对于您昨天提出的问题,客户端将得到一个 bytes_received 计数为零,然后终止其循环。

关于c - 套接字 :client waiting even after recieving last byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781422/

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