首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

有关select函数的有关问题

2014-01-09 
有关select函数的问题我在收包程序中,使用select函数来判断是否接受超时,结果,当网络不通时(ping不通,我发

有关select函数的问题
我在收包程序中,使用select函数来判断是否接受超时,结果,当网络不通时(ping不通,我发送的也是icmp请求报文),select函数也是返回的正值。
代码如下:
…………………………
send:
    /* start the ping's going ... */
    apmlog_send_icmp_pkt(pthd_para);

    /* listen for replies */
    while (1) {
        FD_ZERO(&readfds);
        FD_SET(pthd_para->pingsock, &readfds);
        maxfdp = pthd_para->pingsock + 1;
        timeout.tv_sec = PINGINTERVAL;      /* 2s的阻塞时延 */
        timeout.tv_usec = 0;

        slc_ret = select(maxfdp, &readfds, NULL, NULL, &timeout);
        printf("select func ret is %d\n", slc_ret);
        if (slc_ret <= 0) {
            switch (ret) {
            case 0:
                printf("ping [%s] timeout, [%d] packets transmitted!\n", pthd_para->ping_addr,
                    pthd_para->ntransmitted);
                break;
            default:
                printf("select: error unknow!\n");
                break;
            }
            //FD_CLR(pthd_para->pingsock, &readfds);
            if (pthd_para->ntimes > pthd_para->ntransmitted) {
                goto send;
            } else {
                break;
            }
        }
……………………………………
我给一个ping不通的ip发包,其测试结果:
select func ret is 1

这是怎么回事呢?ping不通,没有reply包返回,ret应该是为0啊!

[解决办法]
select返回一,你在看看是哪个fd返回的,检查那个返回是不是有问题,有问题关闭了,应该就可以了。

热点排行