我有一个服务器应用程序。
服务器在线程中接受来自客户端的连接:
while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
{
.....
}
我有另一个线程在我的应用程序退出时执行。在这个线程中,我关闭了套接字 socket_desc
:
close(socket_desc);
关闭线程中的套接字并且有另一个线程在同一个套接字上进行接受有什么风险?
最佳答案
我可能是错的。但是,它可能适用于这样的场景:- 考虑 3 个线程 - A、B、C。
- 线程 A 等待套接字并进入休眠状态
- 线程 B 关闭套接字
- 线程 C 创建一个新的套接字,它恰好获得与最近关闭的套接字相同的文件描述符编号(套接字也是一个文件)
- 线程 A 唤醒(在
accept
上有错误代码)然后调用close
thinking unexpected error => 这会影响在 C 中创建的完全不同的有效套接字!!
关于c++ - 通过接受关闭在另一个线程中使用的套接字的风险是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239895/