我很新的编程和ESP网络编程,所以如果它是愚蠢的,请不要太苛刻,谢谢。UDP和套接字,recvfrom()返回-1和资源暂时不可用
我有客户端和服务器通信与图表(UDP)在客户端发送5个信息和收到消息后,服务器发回消息。接收和发送消息非常好,直到客户端完成接收消息。在服务器发回所有消息后,它使用close()终止。所以客户端的recvfrom()应该返回0,对吧?
假设recvfrom()从服务器端返回close()时应返回0,它将返回-1,而错误Resource暂时不可用。这是资源引用从服务器封闭的套接字?还是像其他完全不同的东西,比如用完缓冲区或其他东西(我认为这不是真的)?
,并假设我的假设是错误的,则返回-1,因为服务器端,我也许应该处理与
if(SOMEMACRO)
do something
的错误,但我如何找出SOMEMACRO
是什么?我打印出来的错误,但它说资源temp不可用和recvfrom()描述没有提到不可靠的资源..?
btw这是一个非阻塞套接字,如果这有什么区别,因为我读过如果设置了O_NONBLOCK并且没有消息可用,它会将errno设置为EAGAIN或EWOULDBLOCK。 O_NONBLOCK未设置,但MSG_DONTWAIT已设置。他们基本上是相同的东西,其中O_NONBLOCK是用于一般文件描述符,而MSG_DONTWAIT是套接字特定的?
我的大脑现在并不是那么伟大,如果有人能够启发我并澄清我的困惑,我会深表感谢。谢谢!
所以,如果你使用UDP,recvfrom()会返回0吗?因为你永远不知道对方是否执行了有序的关机? – 2010-03-04 14:02:13
@Fantastic Fourier - UDP实际上可以发送一个只有IP和UDP头但没有数据有效载荷的数据报。这是完全合法的,并会看起来像一个0字节的读取。 – Duck 2010-03-04 14:21:46
@Fantastic Fourier - 严格来说,由于UDP中没有“连接”,所以没有任何关闭,有序或其他。 – Duck 2010-03-04 14:28:33