close() 与 shutdown() 和 receive()
我有以下代码:
客户端:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想通了。
使用
SO_LINGER
设置套接字,从而导致异常关闭。现在,它在
shutdown()
之后返回-1
。I figured it out.
Set the socket with
SO_LINGER
and thus cause an abortive shutdown.Now it returns
-1
aftershutdown()
.不要从服务器调用 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.