0

问题 1

从 SUSE 手册页,我得到以下套接字连接选项的详细信息

如果启动套接字是连接模式,则 connect() 将尝试建立到地址参数指定的地址的连接。如果无法立即建立连接并且没有为套接字的文件描述符设置 O_NONBLOCK,则 connect() 将阻塞一个未指定的超时间隔,直到建立连接。如果超时间隔在连接建立之前到期,connect() 将失败并且连接尝试将被中止。如果 connect() 被阻塞等待建立连接时捕获的信号中断,connect() 将失败并将 errno 设置为 [EINTR],但连接请求不应中止,并且应异步建立连接。

问题:以上内容对 AIX OS 有效吗(尤其是连接超时、定时等待等)?因为我在 AIX 手册页(5.1 和 5.3)中没有看到它

问题2

我有一个客户端套接字,其属性是
a。SO_RCVTIMEO ,SO_SNDTIMEO 设置为 5 秒。
湾。AF_INET 和 SOCK_STREAM。
C。SO_LINGER 持续时间为 5 秒。
d。SO_REUSEADDR 已设置。
请注意,客户端套接字不是 O_NONBLOCK。

问题:现在由于没有设置 O_NONBLOCK 并且 SO_RCVTIMEO 和 SO_SNDTIMEO 设置为 5 秒,这是否意味着

一种。连接非阻塞还是阻塞?
湾。如果阻塞,是定时阻塞还是“无限”时间阻塞?
C。如果它是无限的,我如何建立一个“连接”系统调用,它是 O_BLOCKING,超时时间为 t 秒。

对不起,如果问题很幼稚。
提前感谢您的意见。

4

2 回答 2

2

全部,
经过搜索和扫描,终于找到了我的问题的答案。
我发布它是为了帮助其他可能面临同样问题的人。

问题:以上内容对 AIX OS 有效吗(尤其是连接超时、定时等待等)?因为我在 AIX 手册页(5.1 和 5.3)中没有看到它

回答

从 AIX 支持工程师的大量搜索和一些帮助中发现,手册页符合 POSIX 标准,并且应该对 AIX 和 SUSE OS 都有效。

因此证明了连接系统API(O_BLOCK)可以在罕见的情况下阻塞未指定的超时间隔

问题:现在由于没有设置 O_NONBLOCK 并且 SO_RCVTIMEO 和 SO_SNDTIMEO 设置为 5 秒,这是否意味着

一种。连接非阻塞还是阻塞?
湾。如果阻塞,是定时阻塞还是“无限”时间阻塞?
C。如果它是无限的,我如何建立一个“连接”系统调用,它是 O_BLOCKING,超时时间为 t 秒。

回答

a.如果为 SO_RCVTIMEO 和/或 SO_SNDTIMEO 指定了 O_NONBLOCK,则它仅适用于那些 API,即分别为 recv 和 send API。

湾。如果 connect API 用于阻塞调用,那么是的,connect 可以阻塞未指定的时间间隔。

下面的链接被证明是理解套接字编程内部的极好指南。

http://www.ibm.com/developerworks/aix/library/au-tcpsystemcalls/index.html

感谢大家花时间回答我的问题。

于 2010-05-20T16:44:04.780 回答
0

问题 1:我在那里看到的一切似乎都适用于 AIX。未指定超时的原因是因为它是特定于协议的。在 IBM 文档中搜索“connect”(下面的链接)。第二个打击是可能感兴趣的一般性讨论。

通常,AIX 使用 BSD 模型。我不确定 Linux 使用什么。我相信它与传统的 BSD 模型非常接近,但我也知道它在某些细微之处有所不同。

问题 2:我会去IBM 5.3 文档做一些搜索。例如,它表示未使用 SO_RCVTIMEO。可以肯定的是,我需要做一些实验,但我希望连接会阻塞。我看不出有什么可以阻止它的。它会永远阻塞。第 2c 部分我会采用以下两种方式之一。简单的方法是设置一个计时器,当它弹出时,系统调用将返回 EINTR。另一种选择是将其设置为 O_NONBLOCK ,然后使用带有计时器参数的 select 等待它连接或不连接。同样,我必须试验和调试代码才能准确。

于 2010-05-15T16:04:42.483 回答