-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