-1
有谁知道在这种情况下recvfrom UDP套接字返回-1但errno是0?在这种情况下,recvfrom UDP套接字返回-1,但errno是0?
有谁知道在这种情况下recvfrom UDP套接字返回-1但errno是0?在这种情况下,recvfrom UDP套接字返回-1,但errno是0?
在recvfrom
返回后,调用某些其他函数将errno
设置为零的情况。这非常容易做到。为了安全起见,在recvfrom
返回后立即将errno
复制到其他变量立即。
错误:
i = recvfrom (...);
if (i < 0)
{
printf ("recvfrom error!\n");
printf ("errno=%d\n", errno);
}
如果第一printf
修改errno
会发生什么?
右:
i = recvfrom (...);
if (i < 0)
{
int j = errno;
printf ("recvfrom error!\n");
printf ("errno=%d\n", j);
}
的ANSI规范说,“[A],使用错误号错误检查程序应该......随后的库函数调用之前检查它。”
从来没有。这不应该发生。
好了,我快要扑了。但肯定它会更加重要的是颠倒'printf()'调用的顺序,或者将它们组合起来? – EJP