Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets SO_套接字操作成功后的错误值_Sockets_Posix - Fatal编程技术网

Sockets SO_套接字操作成功后的错误值

Sockets SO_套接字操作成功后的错误值,sockets,posix,Sockets,Posix,我对一个成功的套接字操作之后与getsockopt()一起使用的SO_ERROR套接字选项的行为感到好奇 委员会: SO_错误 报告有关错误状态的信息并将其清除。该选项应存储一个int值 通常我会看到套接字操作返回-1后使用SO_ERROR,但是如果上一个套接字操作成功(因此不返回-1),会发生什么情况呢。getsockopt()调用是否失败?它是否返回0作为int值?它未定义。只有当您已经知道发生了错误时,才应该调用此选项。不是用来发现是否有一个。它是未定义的。只有当您已经知道发生了错误时,才

我对一个成功的套接字操作之后与getsockopt()一起使用的SO_ERROR套接字选项的行为感到好奇

委员会:

SO_错误 报告有关错误状态的信息并将其清除。该选项应存储一个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_错误检索)