Sockets SO_套接字操作成功后的错误值
我对一个成功的套接字操作之后与getsockopt()一起使用的SO_ERROR套接字选项的行为感到好奇 委员会: SO_错误 报告有关错误状态的信息并将其清除。该选项应存储一个int值Sockets SO_套接字操作成功后的错误值,sockets,posix,Sockets,Posix,我对一个成功的套接字操作之后与getsockopt()一起使用的SO_ERROR套接字选项的行为感到好奇 委员会: SO_错误 报告有关错误状态的信息并将其清除。该选项应存储一个int值 通常我会看到套接字操作返回-1后使用SO_ERROR,但是如果上一个套接字操作成功(因此不返回-1),会发生什么情况呢。getsockopt()调用是否失败?它是否返回0作为int值?它未定义。只有当您已经知道发生了错误时,才应该调用此选项。不是用来发现是否有一个。它是未定义的。只有当您已经知道发生了错误时,才
通常我会看到套接字操作返回-1后使用SO_ERROR,但是如果上一个套接字操作成功(因此不返回-1),会发生什么情况呢。getsockopt()调用是否失败?它是否返回0作为int值?它未定义。只有当您已经知道发生了错误时,才应该调用此选项。不是用来发现是否有一个。它是未定义的。只有当您已经知道发生了错误时,才应该调用此选项。不作为发现是否存在的手段。非阻塞连接没有问题,请参阅 套接字是非阻塞的,无法立即完成连接。通过选择用于写入的套接字,可以选择(2)或轮询(2)以完成。选择(2)指示可写性后,使用getsockopt(2)读取SOL_SOCKET级别的SO_错误选项,以确定connect()是否成功完成(SO_错误为零))或失败(SO_错误是此处列出的常见错误代码之一,解释了失败的原因)
其他未定义。非阻塞连接可以,请参阅 套接字是非阻塞的,无法立即完成连接。通过选择用于写入的套接字,可以选择(2)或轮询(2)以完成。选择(2)指示可写性后,使用getsockopt(2)读取SOL_SOCKET级别的SO_错误选项,以确定connect()是否成功完成(SO_错误为零))或失败(SO_错误是此处列出的常见错误代码之一,解释了失败的原因)
另一个是未定义的。我已经了解了更多关于Unix网络程序中的SO_错误的信息。在第1卷中,我已经很清楚了。因此,_ERROR用于报告由网络堆栈中的事件导致的异步错误,而不是由库调用(send/recv/connect)导致的同步错误。同步结果通过errno报告 在库调用返回-1后调用getsockopt()时出现SO_错误,这在POSIX实现中是不正确的。
通过select学习非阻塞连接结果是发现异步结果何时就绪的一个示例(然后可以通过SO_错误检索该结果)我在Unix网络程序MIG Vol 1中了解了有关SO_错误的更多信息,这一点我已经很清楚了。因此,_ERROR用于报告由网络堆栈中的事件导致的异步错误,而不是由库调用(send/recv/connect)导致的同步错误。同步结果通过errno报告 在库调用返回-1后调用getsockopt()时出现SO_错误,这在POSIX实现中是不正确的。 通过select学习非阻塞连接结果是发现异步结果何时就绪的一个示例(可通过SO_错误检索)