怎么可能connect()失败并将errno设置为EADDRINUSE

Eti*_*oms 6 c sockets posix

我正在编写一些关键代码,并且需要在某一点上建立TCP连接connect().

我深入研究POSIX手册以确保我的代码完全符合POSIX标准,并且必须编写涵盖所有可能错误情况的单元测试.

考虑到这个文档,我无法理解以下含义:

EADDRINUSE尝试建立使用已在使用的地址的连接.

乍一看,我认为我可以通过缺少短暂的端口来触发,但是这个错误是由EADDRNOTAVAIL(我在单元测试中成功触发)报告的.

具体来说,这是什么意思?哪种情况可能导致此错误?我理解这个错误的语义bind(),但是如何connect()提高呢?

Jay*_*Jay 0

在您提供的链接中,它说:

如果套接字尚未绑定到本地地址,则 connect() 应将其绑定到一个未使用的本地地址(除非套接字的地址族是 AF_UNIX)。

这可能会触发您提到的错误。