c++ - unixaccept()函数两次返回相同的文件描述符

标签 c++ c multithreading networking epoll

我的多线程网络服务器程序有问题。

我有一个正在监听新客户端连接的主线程。我使用 Linux epoll 来获取 I/O 事件通知。对于每个传入事件,我创建一个线程来接受新连接并为其分配一个 fd。在重负载下,可能会出现同一个 fd 被分配两次导致我的程序崩溃的情况。

我的问题是:系统如何重新分配一个仍被另一个线程使用的fd?

谢谢

最佳答案

这里可能存在竞争条件 - 但如果没有看到您的代码,就很难诊断。

您最好在主线程上accept,然后将接受的套接字传递给新线程。

如果您将监听套接字传递给新线程然后执行接受 - 您将遇到竞争条件。

有关更多信息,您可以查看此处:https://stackoverflow.com/a/4687952/516138

this是有关网络效率的良好背景(尽管可能有点过时)。

关于c++ - unixaccept()函数两次返回相同的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061961/

相关文章:

c++ - 初学者使用对象和类时出现以下错误

C 代码 - 段错误

c - 2 的补码中的 16 位值,令人困惑

multithreading - SQLite-插入操作会阻止读取吗?

c++ - 为什么多线程中的 Local/Stack 变量不需要锁定

c++ - 在函数内部使用声明函数?

c++ - 如何禁用 Boost 概念检查

c++ - `type` 对于 std::vector 而不是 OpenCV 中的 cv::Mat 的解释是什么?我该如何更改它? (C++)

c++ - 对 getaddrinfo() 的所有调用均返回 11001

python - 当在队列中启动多个线程时,哪个线程从堆栈中取出第一个