1

我看不懂下面的代码。当reservedFd_ == -2时,表示接受了两个多客户端,为什么?非常感谢。

// In one function.
...
...
reservedFd_ = ::open("/dev/null", O_APPEND);
if (-1 == reservedFd_)
{
    LOG_DEBUG("Failed to open reserved file!, errno: %d", errno);
}

...
...
...
----------------------------------------------------------------------
// then in other function we accept a new client socket
void TCPServer::HandleAccept( const boost::system::error_code& _err )
{
    if (!_err)
    {
            // too many clients accepted? why?
        if (-2 == reservedFd_)
        {
            boost::system::error_code ignored_ec;
            session_->GetSocket().close(ignored_ec);
        }
        else
        {
        ...
        }

    }

...
}
4

1 回答 1

4

open(2)返回一个新的文件描述符,如果发生错误,则返回 -1。errno会告诉你失败的具体原因。如果打开的文件描述符太多,那么您应该获取 EMFILE 或 ENFILE。用于strerror(3)获取可读的错误消息。

LOG_DEBUG("Failed to open reserved file: %s", strerror(errno));

open(2)永远不应该返回-2。那将是违反 POSIX.1 规范的未记录返回码。这将导致世界上大量程序出现问题,这些程序没有预料到。

于 2012-12-20T03:22:56.767 回答