我无法理解下面的代码。当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
{
...
}
}
...
}
答案 0 :(得分:4)
open(2)
返回一个新的文件描述符,如果发生错误则返回-1。 errno
会告诉您失败的具体原因。如果打开的文件描述符太多,则应该获得EMFILE或ENFILE。使用strerror(3)
获取可读的错误消息。
LOG_DEBUG("Failed to open reserved file: %s", strerror(errno));
open(2)
永远不会返回-2。这将是违反POSIX.1规范的未记录的返回代码。这会导致世界上大量的节目出现问题而不期待它。