C++ open的返回值(“dev/null”,O_APPEND)可能表示打开的文件太多?

C++ open的返回值(“dev/null”,O_APPEND)可能表示打开的文件太多?,c++,linux,networking,boost,C++,Linux,Networking,Boost,我无法理解下面的代码。当reservedFd_==-2时,表示有两个多客户机被接受,为什么?多谢各位 // In one function. ... ... reservedFd_ = ::open("/dev/null", O_APPEND); if (-1 == reservedFd_) { LOG_DEBUG("Failed to open reserved file!, errno: %d", errno); } ... ... ... --------------------

我无法理解下面的代码。当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
        {
        ...
        }

    }

...
}
open(2)
返回一个新的文件描述符,如果发生错误,返回-1<代码>错误号将告诉您故障的具体原因。如果打开的文件描述符太多,则应获取EMFILE或ENFILE。使用
strerror(3)
获取可读的错误消息

LOG_DEBUG("Failed to open reserved file: %s", strerror(errno));
open(2)
不应返回-2。这将是违反POSIX.1规范的未记录返回代码。这将导致世界上大量程序出现问题,而这些程序都不希望出现这种情况。

open(2)
返回一个新的文件描述符,如果出现错误,则返回-1<代码>错误号将告诉您故障的具体原因。如果打开的文件描述符太多,则应获取EMFILE或ENFILE。使用
strerror(3)
获取可读的错误消息

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

open(2)
不应返回-2。这将是违反POSIX.1规范的未记录返回代码。这会给世界上大量的程序带来意想不到的问题。

谢谢你的回答。也许我没有说清楚:open(“/dev/null”,O_APPEND)和if(-2==reservedFd_)不在同一个函数中。是否可能在打开/dev/null成功后,系统在其他位置修改了reservedFd_uuu值?原因是进程接受了太多的客户端套接字?感谢您的回答。可能我没有清楚地描述它:open(“/dev/null”,O_APPEND)和if(-2==reservedFd_)不在同一个函数中。是否有可能在打开/dev/null成功后,系统在其他位置修改了reservedFd_uu的值?原因是进程接受了太多的客户端套接字?