首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pppd在拨号过程中卡住

pppd在拨号过程中卡住
EN

Stack Overflow用户
提问于 2011-06-28 15:55:04
回答 1查看 1K关注 0票数 0

我正在把几个usb调制解调器连接到我的Ubuntu上:

uname -a

Linux devlp 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux

pppd version: 2.4.5

我正在使用8个sierra无线调制解调器进行测试,所有这些调制解调器都已连接并正常工作。它们中的每一个都有一个"ppp“接口。

连接后,我尝试重新连接ppp7,一开始,pppd失败,然后在第二次尝试时,它显示:"Serial connection established“并卡住。我尝试了所有的kill信号来终止那个pppd,但没有成功,终止它的唯一方法是插入它试图拨打的调制解调器。

我找到了pppd卡住的确切位置,它就在这里:

代码语言:javascript
复制
int generic_establish_ppp (int fd)
{
    int x;

    if (new_style_driver) {
        int flags;
        FILE *f=fopen("/root/ptest.log","a");
        fputs("before get channel\n",f);
        fflush(f);
        /* Open an instance of /dev/ppp and connect the channel to it */
        if (ioctl(fd, PPPIOCGCHAN, &chindex) == -1) { // <<<<<<< STUCK HERE
            error("Couldn't get channel number: %m");
            goto err;
        }
        fputs("after get channel\n",f);
        ....
    }
}

看起来问题特别是ppp7的问题--它可以是任何调制解调器,所以我不认为这是调制解调器的问题,但我不明白的是,在这个命令中到底发生了什么?谁对这个问题负责?它仅仅是内核吗?调制解调器驱动程序?调制解调器本身?我不太明白如何处理这些信息,因为PPPIOCGCHAN文档非常糟糕。

一开始,我想也许pppd在断开连接后不会释放通道或ppp,所以我编译了自己的pppd版本,并添加了PPPIOCDISCONN和PPPIOCDETACH,以确保我的版本没有问题,结果是一样的。

你怎么想的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 00:44:16

很好,我已经解决了这个问题-我在ioctl命令之前在pppd中添加了一些行,使fd NONBLOCK :)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6503326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档