gpt4 book ai didi

c - 套接字:处理 APUE 书中的示例

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:18 25 4
gpt4 key购买 nike

考虑 APUE 书中的以下示例:

#include <errno.h>
#include <sys/socket.h>
int initserver(int type, const struct sockaddr *addr,
socklen_t alen, int qlen)
{
int fd;
int err = 0;
if ((fd = socket(addr->sa_family, type, 0)) < 0)
return -1;
if (bind(fd, addr, alen) < 0) {
err = errno;
goto errout;
}
if (type == SOCK_STREAM || type == SOCK_SEQPACKET) {
if (listen(fd, qlen) < 0) {
err = errno;
goto errout;
}
}
return(fd);
errout:
close(fd);
errno = err;
return -1;
}

问题是为什么errno会被保存然后恢复?因为可以在close(fd)中设置?那为什么可以忽略呢?

最佳答案

是的,(可能)是因为 close 调用。 close 的返回和可能的错误被忽略,因为 initserver 的调用者很可能想要来自 socketlisten 的错误 函数,如果其中一个失败,而不是来自 close 函数,它可以将 errno 设置为完全不相关的东西。

关于c - 套接字:处理 APUE 书中的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com