如果这个问题与其他类似问题重复,我深表歉意。
我在负载非常低的少数系统上设置小型服务器客户端(一次不超过 10-15 个连接,这也会进行非常低的数据传输)。我想知道是否应该使用阻塞或非阻塞套接字?
在服务器端,我正在使用 select,当它返回时,我去阅读 fds。现在,如果我在 select 中使用非阻塞套接字,那么 select 后面的“recv”有什么优势。是否会出现这样的情况,即 select 告诉您有可阅读的内容,但实际上没有可阅读的内容?
谢谢
如果这个问题与其他类似问题重复,我深表歉意。
我在负载非常低的少数系统上设置小型服务器客户端(一次不超过 10-15 个连接,这也会进行非常低的数据传输)。我想知道是否应该使用阻塞或非阻塞套接字?
在服务器端,我正在使用 select,当它返回时,我去阅读 fds。现在,如果我在 select 中使用非阻塞套接字,那么 select 后面的“recv”有什么优势。是否会出现这样的情况,即 select 告诉您有可阅读的内容,但实际上没有可阅读的内容?
谢谢
我想知道是否应该使用阻塞或非阻塞套接字?
对于如此低的负载,我将使用阻塞套接字并为每个套接字提供其自己的专用线程来运行。话虽select()
如此,如果您对多线程编程不满意,它适用于阻塞和非阻塞套接字。
是否会出现这样的情况,即 select 告诉您有可阅读的内容,但实际上没有可阅读的内容?
是的。在正常断开连接时,select()
报告一个套接字是可读的,然后recv()
在该套接字上返回 0。
我同意@Remy。
但是,我建议你不要使用线程。至少不是一开始。我建议这样做的原因是因为听起来你对这种类型的东西有点陌生,而且线程可能会给你带来比你需要的更多的头痛,以便让基本的通信正常运行。