【问题标题】:close() vs. shutdown() with recv()使用 recv() 的 close() 与 shutdown()
【发布时间】:2009-11-08 12:05:01
【问题描述】:

我有以下代码:

客户端:

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

服务器端:

shutdown(sockk,SD_BOTH);

问题是,客户端recv返回0,表示正常关机。我需要它返回 -1(我无法更改客户端,我需要调整我的代码。)

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

【问题讨论】:

  • 为什么要返回-1?这是一个优雅的关机。如果您不想正常关机,请不要使用shutdown()

标签: c sockets winsock


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2017-03-16
      • 2013-04-10
      • 2016-05-15
      • 2015-10-26
      相关资源
      最近更新 更多