免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1968 | 回复: 0
打印 上一主题 下一主题

关于多线程select [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-14 11:14 |只看该作者 |倒序浏览
我有两个线程,其中一个线程select 一个socket, 这个socket是我和外面通讯的接口,跑UDP协议。
另外一个socket是linux内部socket, 是socketpair创建的。是和其他子进程通讯的接口。
具体如下:
switch(select(para.sock + 1, &fdR,NULL,NULL,&csel)){
                        case -1:
                                if (errno == EINTR){
                                        ah_dbg(info,"have a interrupt!\n");  
                                        return 0;
                                }
                                ah_err("select error:%d!\n",errno);
                                continue;                                
                        case 0:
                                if (get_listen_state == LISTEN_STOP){
                                        ah_dbg(info,"timer out!\n");
                                        break;
                                }
                                continue;
                        default:
                                if (FD_ISSET(para.sock,&fdR)) {   
                                     /*do my thing*/
                               }
}

另外一个线程的内部socket
FD_ZERO(&fdR);
                FD_SET(para.dtls.SocketPair[DTLS_SOCKET_READ], &fdR);
                  ah_dbg(ssl,"Ready listen socket %d\n",para.dtls.SocketPair[DTLS_SOCKET_READ]);
                switch(select(para.dtls.SocketPair[DTLS_SOCKET_READ] + 1, &fdR,NULL,NULL,&sel)){
                        case -1:                                
                                 ah_dbg(ssl,"have a interrupt!\n");
                                continue;                                
                        case 0:
                                ah_dbg(ssl,"dtls select time out\n");
                                continue;
                        default:
                                if (FD_ISSET(para.dtls.SocketPair[DTLS_SOCKET_READ], &fdR)) {     
                                        /*do my thing*/  
                                }


问题是第一个select完全正常工作,第二个select经常收到第一个socket的数据(socketpair【DTLS_SOCKET_READ】工作不正常)

请问是甚么问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP