perror和errno怎么能显示不同的结果(Linux)?

时间:2016-02-18 18:05:37

标签: linux errno

我在套接字上调用bind(),由于“正在使用地址”,调用失败。无论如何,我相信这是失败的 - 套接字已被崩溃的应用程序的前一个实例保持打开状态。具体来说,bind()返回负值。但是,errno在函数返回时读取零。但是,perror()会生成“正在使用的地址”。

在什么条件下,errno和perror()在错误代码的值上不一致?我知道errno系统是线程安全的(同时还有其他线程在运行)。我在Linux 3.14.43上。

if (bind(s, (struct sockaddr *)&server, sizeof(server)) < 0)
{
    printf("\nerrno %i %s\n", errno, strerror(errno));
    perror("PERROR");

    //  raise error
    __ERROR("failed bind socket");
}

以上代码生成此输出:

errno 0 Success
PERROR: Address already in use
**** ERROR **** failed bind socket

也许我误解了errno,strerror()和perror()之间的关系?

0 个答案:

没有答案