如何区分具有相同错误代码的两个不同错误?
How to differentiate between two different errors with the same error code?
通读 Linux 手册页,我有时会遇到可以 return/set 两个不同错误的相同错误代码的函数。一些例子是:
pthread_create
可以 return EAGAIN
和 EAGAIN
。
pthread_join
可以 return 同时 EINVAL
和 EINVAL
。
socket
and bind
可以将 errno
设置为 EINVAL
和 EINVAL
。
还有更多例子(比如send
can set EAGAIN
and EAGAIN
and bind
可以设置EADDRINUSE
和EADDRINUSE
,但它们似乎取决于你是否使用数据报套接字,因此可以理解根据上下文找出正确的错误)。
我应该区分这些错误是什么意思?
没有通用的方法来区分这些条件。
有时手册页会指定您可以检查的条件,但仅此而已。
您应该设计您正在构建的内容,以便您尝试检测的差异无关紧要。例如,如果您得到 EAGAIN
,请稍后再试(或者 return 给客户端的东西会导致它再试)。
通读 Linux 手册页,我有时会遇到可以 return/set 两个不同错误的相同错误代码的函数。一些例子是:
pthread_create
可以 returnEAGAIN
和EAGAIN
。pthread_join
可以 return 同时EINVAL
和EINVAL
。socket
andbind
可以将errno
设置为EINVAL
和EINVAL
。
还有更多例子(比如send
can set EAGAIN
and EAGAIN
and bind
可以设置EADDRINUSE
和EADDRINUSE
,但它们似乎取决于你是否使用数据报套接字,因此可以理解根据上下文找出正确的错误)。
我应该区分这些错误是什么意思?
没有通用的方法来区分这些条件。
有时手册页会指定您可以检查的条件,但仅此而已。
您应该设计您正在构建的内容,以便您尝试检测的差异无关紧要。例如,如果您得到 EAGAIN
,请稍后再试(或者 return 给客户端的东西会导致它再试)。