如果套接字是非阻塞的,我将读操作的返回值设为0,如果套接字被标记为阻塞,则读取实际的字节数。无法理解为什么......
这是在嵌入式操作系统上,但应该是Berkely套接字
答案 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重绘或提供其他请求。