Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
嗨,我想使用 tcp 连接来发送/接收消息。问题是我想发送许多消息并测量延迟。因此,我不想在发送每条消息后都收到。但是,如果我不及时处理传入的消息,程序总是会得到意想不到的结果。有什么方法可以处理 recv() 而不会阻止我的发送 msg 的程序?任何意见将不胜感激。
使用 TCP 测量延迟可能不是最佳想法,因为 TCP 必然会引入其自身的延迟(请参阅Nagle 的算法)。TCP的意思是字节流,它甚至没有明确定义的“消息”概念。
您可以将套接字设置为非阻塞recv(),如果没有数据将导致立即返回。如果您不想通过轮询来浪费 CPU,则可以改为使用select()检测套接字何时有数据可供读取。
recv()
select()
您可以使用select()来测试传入的数据是否可用。
我在这里没有提到的一个选项是使用一个单独的线程来接收。这样,您可以进行简单的哑阻塞等待,而不会(太多)干扰其他线程中的发送逻辑。