我的多线程网络服务器程序有问题。
我有一个正在监听新客户端连接的主线程。我使用 Linux epoll 来获取 I/O 事件通知。对于每个传入事件,我创建一个线程来接受新连接并为其分配一个 fd。在重负载下,可能会出现同一个 fd 被分配两次导致我的程序崩溃的情况。
我的问题是:系统如何重新分配一个仍被另一个线程使用的fd?
谢谢
最佳答案
这里可能存在竞争条件 - 但如果没有看到您的代码,就很难诊断。
您最好在主线程上accept
,然后将接受的套接字传递给新线程。
如果您将监听套接字传递给新线程然后执行接受 - 您将遇到竞争条件。
有关更多信息,您可以查看此处:https://stackoverflow.com/a/4687952/516138
和this是有关网络效率的良好背景(尽管可能有点过时)。
关于c++ - unixaccept()函数两次返回相同的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061961/