gpt4 book ai didi

c++ - 在 C 或 C++ 中同时在同一个套接字上读写

转载 作者:IT老高 更新时间:2023-10-28 12:39:29 25 4
gpt4 key购买 nike

我正在实现一个简单的服务器,它接受单个连接,然后使用该套接字同时从读写线程读取和写入消息。在 Linux 上的 c/c++ 中同时读取和写入同一个套接字描述符的安全且简单的方法是什么?我不需要担心从同一个套接字读取和写入的多个线程,因为将有一个专用的读取和一个专用的写入线程写入套接字。

在上述场景中,是否需要任何类型的锁定?

以上场景是否需要非阻塞socket?

是否有任何开源库可以在上述情况下有所帮助?

最佳答案

In the above scenario, is any kind of locking required?

无。

Does the above scenario require non blocking socket?

您可能担心的一点 - read/recvwrite/send已建立连接上的线程 - not 如果您对这些线程坐在那里等待完成感到高兴,则需要非阻塞。这通常是您使用线程而不是 select 的原因之一。 , epoll , async operations , 或 io_uring - 使代码也更简单。

如果接受新客户端的线程乐于阻止对 accept() 的调用,那么你们也很好。

不过,如果您的程序发展到可以处理多个客户端并且需要定期进行一些内务处理,那么您可能希望牢记 TCP 服务器的一个微妙问题。使用 select 是很自然和诱人的。或 epoll调用超时以检查监听套接字的可读性 - 这表示客户端连接尝试 - 然后 accept连接。那里有一个竞争条件:客户端连接尝试可能在 select()accept() 之间中断,在这种情况下 accept() 将如果监听套接字不是 non-blocking 则阻塞,这可能会阻止及时返回到 select() 循环并暂停周期性的超时处理,直到另一个客户端连接为止。

Is there any opensource library, that would help in the above scenario?

有数百个用于编写基本服务器的库(并且要求 3rd 方库建议在 SO 上是题外话,所以我不会深入探讨),但最终你所要求的很容易在操作系统上实现-提供BSD sockets API或 Windows SCSS ( "winsock" )。

关于c++ - 在 C 或 C++ 中同时在同一个套接字上读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com