相关疑难解决方法(0)

如果在单独的线程中关闭(2)文件描述符,select(2)会怎么做?

select(2)当一个正在监视读取的文件描述符被另一个线程关闭时,该函数的行为是什么?

从一些粗略的测试,它确实立即返回.我怀疑结果要么是(a)它仍然继续等待数据,但如果你真的试图从它读取你会得到EBADF(可能 - 有一个潜在的竞赛)或(b)它假装好像文件描述符从未传入.如果后一种情况为真,传入一个没有超时的fd将导致死锁,如果它被关闭.

c linux multithreading posix

24
推荐指数
3
解决办法
9840
查看次数

从套接字选择中断

我有一个循环,基本上每隔几秒(超时后)调用它:

 while(true){

    if(finished)
       return;

    switch(select(FD_SETSIZE, &readfds, 0, 0, &tv)){
        case SOCKET_ERROR : report bad stuff etc; return;
        default : break;
    }

    // do stuff with the incoming connection
 }
Run Code Online (Sandbox Code Playgroud)

因此,基本上每隔几秒(由tv指定),它会重新激活监听.

这是在线程B(不是主线程)上运行的.有时我想从线程A(主线程)立即结束这个接受器循环,但似乎我必须等到时间间隔结束.

有没有办法从另一个线程中断选择函数,以便线程B可以立即退出?

c c++ sockets

9
推荐指数
1
解决办法
3574
查看次数

标签 统计

c ×2

c++ ×1

linux ×1

multithreading ×1

posix ×1

sockets ×1