在哪种情况下,UDP套接字的recv返回-1但是errno为0?

时间:2015-04-15 09:34:42

标签: linux sockets network-programming

有谁知道在哪种情况下,来自UDP套接字的recv返回-1但是errno是0?

2 个答案:

答案 0 :(得分:1)

errno返回后调用将recvfrom设置为零的其他函数的情况。这非常容易做到。为安全起见,请在errno返回后立即将recvfrom复制到其他变量

错:

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规范说,&#34; [A]程序使用errno进行错误检查应该......在后续库函数调用之前检查它。&#34;

答案 1 :(得分:1)

从不。这不应该发生。