【发布时间】:2019-07-20 23:25:04
【问题描述】:
通过阅读 Linux 手册页,我有时会遇到可以为两个不同的错误返回/设置相同错误代码的函数。一些例子是:
-
pthread_create可以同时返回EAGAIN和EAGAIN。 -
pthread_join可以返回EINVAL和EINVAL。 -
socket和bind可以将errno设置为EINVAL和EINVAL。
还有更多示例(例如send 可以设置EAGAIN 和EAGAIN 和bind 可以设置EADDRINUSE 和EADDRINUSE,但它们似乎取决于您是否使用数据报套接字因此可以根据上下文找出正确的错误)。
这意味着我应该区分这些错误吗?
【问题讨论】:
-
pthread 函数返回这些错误(如手册页所述) - 我不确定我是否理解您要查找的内容。 socket(2) 和 bind(2) 返回 -1 并设置
errno(再次如手册页所述)。 -
@root
socket和bind都返回-1错误;那是真实的。但是如果出现错误,他们可以将errno设置为EINVAL,即使发生了两个不同的错误。我的问题是当它们都将errno设置为相同的值时,我应该如何区分这两个错误。我可以根据某些情况来做吗?我可以在函数的帮助下做到这一点吗?有什么我不知道的秘密吗?
标签: linux sockets pthreads error-code errno