socket通信时,设置套接字非阻塞并select 与 套接字阻塞 区别

求教:socket通信时,设置套接字非阻塞并select 与 套接字阻塞 区别
网络不太懂,再次求教:
设置套接字非阻塞,这时用select判断是否可读,再recv。如果不可读,可以做其他工作。
阻塞,是等有数据到来时,recv返回非-1。

那么,
问题一:一个线程,专门用于接收数据,那选择非阻塞+select还是选择阻塞,又或者其他什么方式?
问题二:套接字是阻塞,有必要select吗?阻塞的套接字用select有什么用?


先拜谢各位大牛!
------解决思路----------------------
引用:
Quote: 引用:

阻塞与非阻塞 跟select 没有任何关系,都可以用select来判断是否有数据到来。

非阻塞的时候.recv时候 会立即返回。非阻塞recv返回-1的时候,并不一定表示错误,有可能是当前没有数据。
阻塞的时候.recv有数据才会返回。 

嗯,这个我知道。看一段代码,非阻塞,但是循环调用select,有数据就调用recv。select没有需要接收的数据,就Sleep()。我不知道为什么不直接改成阻塞recv。


是否有多个socket 还是一个socket ? 如果是一个话,那用阻塞recv更简单。如过多个了,阻塞recv就难以实现了。