在以下部分代码中:
addrlen = sizeof(addr);
accept(sk, (struct sockaddr *)&addr, &addrlen);
如果接受失败,addrlen是否可能为0或其他!= sizeof(addr)?
答案 0 :(得分:3)
POSIX对此并不清楚,据报道FreeBSD在某些错误条件下确实将*address_len
设置为0,尽管大多数系统在出错时都保持不变。下一个POSIX修订版will clarify,*address_len
在出错时不得修改。至少在下一个POSIX修订版无处不在之前,如果返回错误,应用程序最好不要假设*address_len
的值。
答案 1 :(得分:2)
它不应该,但我似乎记得最近修复的错误,实际上发生了。
答案 2 :(得分:1)
我怀疑你可以依赖它,我也看不出你为什么要这样做的任何理由。您应该检查的第一件事是返回代码,出错时为-1,并且仅在成功时检查地址/地址长度。