accept()是否应该在失败时修改address_len?

时间:2014-05-16 05:06:43

标签: sockets posix freebsd

在以下部分代码中:

addrlen = sizeof(addr);
accept(sk, (struct sockaddr *)&addr, &addrlen);

如果接受失败,addrlen是否可能为0或其他!= sizeof(addr)?

3 个答案:

答案 0 :(得分:3)

POSIX对此并不清楚,据报道FreeBSD在某些错误条件下确实将*address_len设置为0,尽管大多数系统在出错时都保持不变。下一个POSIX修订版will clarify*address_len在出错时不得修改。至少在下一个POSIX修订版无处不在之前,如果返回错误,应用程序最好不要假设*address_len的值。

答案 1 :(得分:2)

它不应该,但我似乎记得最近修复的错误,实际上发生了。

答案 2 :(得分:1)

我怀疑你可以依赖它,我也看不出你为什么要这样做的任何理由。您应该检查的第一件事是返回代码,出错时为-1,并且仅在成功时检查地址/地址长度。