gpt4 book ai didi

c - 在连接非阻塞流套接字时调用 getsockname() 是否安全?

转载 作者:太空狗 更新时间:2023-10-29 11:44:33 45 4
gpt4 key购买 nike

如果我创建一个流套接字,并使其成为非阻塞的,我请求它连接到远程主机,并且 connect() 调用返回 EINPROGRESS,对其发出 getsockname() 调用并期望返回的本地地址是正确的是否安全?

最佳答案

getsockname 返回套接字绑定(bind)的地址。开始连接时的第一件事是将套接字绑定(bind)到本地地址和端口(除非它已经被用户绑定(bind))。这是一个本地的非阻塞操作。因此,即使连接仍在进行中,您也应该从 getsockname 获得可用值。

对于这个论证,我假设您只在 connect 调用返回 EINPROGRESS 之后调用 getsockname,而不是在 connect 尚未返回时从另一个线程调用。该论点还基于这样一个事实,即没有为非阻塞套接字的绑定(bind)系统调用定义特殊行为。这表明绑定(bind)本身不会阻塞。此外,在路由表中查找以确定用于连接的本地地址也应该只使用现有的内核数据,因此不会阻塞。

关于c - 在连接非阻塞流套接字时调用 getsockname() 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333547/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com