我正在编写一些关键代码,并且需要一次使用connect()
建立TCP连接。
我深入研究POSIX手册以确保我的代码完全符合POSIX标准,并且必须编写涵盖所有可能错误情况的单元测试。
考虑到这个document,我无法理解以下含义:
EADDRINUSE 尝试建立使用已在使用的地址的连接。
乍一看,我认为我可以通过缺少短暂的端口来触发,但EADDRNOTAVAIL
(我在单元测试中成功触发)报告了此错误。
具体来说,这是什么意思?哪种情况可能导致此错误?我理解bind()
上此错误的语义,但connect()
怎么能提出这个?
答案 0 :(得分:1)
我的感觉,虽然这是猜测,但是这个错误适用于非TCP套接字,特别是unix套接字 - AF_UNIX (also known as AF_LOCAL)
linux connect() mangpage与您链接的内容略有不同:
EADDRINUSE 本地地址已被使用。
使用“本地”一词让我看到unix
manpage,其中说明了
EADDRINUSE 指定的本地地址已在使用或 文件系统套接字对象已经存在。
答案 1 :(得分:0)
在您提供的链接中,它说:
如果套接字尚未绑定到本地地址,则connect()应将其绑定到一个地址,除非套接字的地址族是AF_UNIX,否则该地址是未使用的本地地址。
这可能会触发您提到的错误。