当通过它接收数据时,UDP“阻塞套接字”的含义是什么?

时间:2010-01-17 08:57:14

标签: udp

如果套接字是非阻塞的,我将读操作的返回值设为0,如果套接字被标记为阻塞,则读取实际的字节数。无法理解为什么......

这是在嵌入式操作系统上,但应该是Berkely套接字

2 个答案:

答案 0 :(得分:3)

阻塞读取将等待有可读数据。非阻塞读取将始终立即返回(0字节是否可用或更多)。

   Upon successful completion, recv() shall return the length of the mes-
   sage  in  bytes.  If  no messages are available to be received and the
   peer has performed an orderly shutdown, recv() shall return 0.  Other-
   wise, -1 shall be returned and errno set to indicate the error.

答案 1 :(得分:2)

阻塞设置意味着当您从套接字读取数据时,它会一直停留在那里,直到发生两件事:1)您获取数据或2)您收到信号。

非阻塞设置意味着当您尝试读取时,如果数据可用,它将返回它们。如果什么也没有,它立即返回而不是等待。如果您不想永远等待数据,这很有用,同时您还想做其他事情,例如进行计算,GUI重绘或提供其他请求。