close() 与 shutdown() 和 receive()

发布于 2024-08-10 21:21:40 字数 250 浏览 6 评论 0原文

我有以下代码:

客户端:

n=recv(sock,buf,1200,NULL);

服务器端:

shutdown(sockk,SD_BOTH);

问题是,客户端 recv 返回 0,意味着正常关闭。我需要它返回-1(我无法更改客户端,我需要调整我的代码以适应它。)

我该怎么做才能使它返回-1?

I have the following code:

Client side:

n=recv(sock,buf,1200,NULL);

Server side:

shutdown(sockk,SD_BOTH);

The problem is, the client side recv is returning 0, meaning graceful shutdown. I need it to return -1 (I can't change the client side, I need to adapt my code to it.)

What can i do to cause it returning -1?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往事风中埋 2024-08-17 21:21:40

我想通了。
使用 SO_LINGER 设置套接字,从而导致异常关闭。
现在,它在 shutdown() 之后返回 -1

I figured it out.
Set the socket with SO_LINGER and thus cause an abortive shutdown.
Now it returns -1 after shutdown().

于我来说 2024-08-17 21:21:40

不要从服务器调用 shutdown() 或 close(),然后您可以向客户端进程发送一些信号。因此,recv() 调用将返回 -1,并使用 EINTR 设置 errno。希望这有帮助。

但我建议你不要采用这种编码实践。 recv() 可以返回 0、+ve 数字和 -1。处理所有这些情况很好。

Do not call shutdown() or close() from server, and you can then send some signal to the client side process. So recv() call will return -1 with errno set with EINTR. Hope this helps.

But I suggest you should not adopt such coding practice. recv() can return 0, +ve number and -1. Its good to handle all these cases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文