我在套接字上调用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()之间的关系?