1

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

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

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

谢谢

4

2 回答 2

4

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

对于如此低的负载,我将使用阻塞套接字并为每个套接字提供其自己的专用线程来运行。话虽select()如此,如果您对多线程编程不满意,它适用于阻塞和非阻塞套接字。

是否会出现这样的情况,即 select 告诉您有可阅读的内容,但实际上没有可阅读的内容?

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

于 2013-02-04T20:02:16.227 回答
0

我同意@Remy。

但是,我建议你不要使用线程。至少不是一开始。我建议这样做的原因是因为听起来你对这种类型的东西有点陌生,而且线程可能会给你带来比你需要的更多的头痛,以便让基本的通信正常运行。

于 2013-02-04T20:07:55.567 回答