Ark*_*nez 5 c++ sockets linux multithreading
我有一个异步应用程序执行多个线程在套接字上执行操作,其中调度操作然后异步执行.
我试图避免在第一次操作开始执行之前,一旦在套接字上调度了读操作,套接字被关闭并重新打开(可能是另一个操作中的另一个对等体)的情况,这将最终读取正确的文件描述符但错误的同伴.
问题来了,因为(accept(); close(); accept())在accept()中返回相同的fd,这可能导致上述情况.
我看不到避免它的方法.
任何提示?
好的,找到答案了。
这里最好的方法是调用accept()并获取可用的最低fd,用您知道的数字复制它,例如dup2(6,1000)和close(6),您现在可以控制您使用的fd范围。
下一次接受将再次出现 6 或类似的情况,我们将 dup2(6,999); 并继续这样减少,如果太低则重置它。
由于接受总是在同一个线程中完成,并且 dup2 和 close 与总是在那里完成的接受相比并不昂贵,因此它非常适合我的需求。