选择非阻塞套接字

时间:2013-02-04 19:40:12

标签: sockets networking tcp

如果这个问题与其他类似问题重复,我道歉。

我在少数几个负载很低的系统上设置小型服务器 - 客户端(一次不超过10-15个连接,这也会产生非常低的数据传输)。我想知道我是否应该使用阻塞或非阻塞套接字?

在服务器端,我使用select,当它返回时,我去阅读fds。现在如果我使用非阻塞套接字选择那么选择后的“recv”的优势是什么。是否存在这样的情况:select会告诉您有可读的内容但实际上没有什么可读的?

由于

2 个答案:

答案 0 :(得分:3)

  

我想知道是否应该使用阻塞或非阻塞套接字?

对于这样的低负载,我会使用阻塞套接字并为每个套接字提供自己的专用线程来运行。也就是说,select()适用于阻塞和非阻塞套接字,如果你不熟悉多线程编程。

  

是否存在这样的情况:select会告诉您有可读的内容但实际上没有什么可读的?

是。在正常断开连接时,select()报告套接字是可读的,然后该套接字上的recv()返回0.

答案 1 :(得分:0)

我同意@Remy。

但是,我建议你不要使用线程。至少不要开始。我建议这样做的原因是因为听起来你对这种类型的东西有点新,并且线程可能只会为你增加比你需要的更多麻烦,以便让基本的通信运行起来。