周末忙了两天,计划补一下进度,预期的又遇到了新的问题。在计划面前,无奈的事情多了,也就习以为常了。首先是wifi和3g的协调工作,然后是wifi与有线网络的动态切换,一看上去,都是再简单不过的事情,可真正做起来,通与不通,差别很小。
ping网关总是不通,strace的结果是recv总是返回ERESTARTSYS,受到信号ALARM的影响,不知道信号的源在何处。
查了一下大体的意思,ERESTARTSYS是驱动和信号处理函数之间api的一部分,只是在驱动层使用,不涉及到用户态程序使用。
驱动需要等待,并被特定的信号所唤醒(等待的事件),它会取消收到的系统调用,以运行信号处理函数(就像在执行阻塞操作时按ctlt-c来进行中断),内核使用ERESTARTSYS作为一个magic值,即信号处理函数结束之后,会自动重新运行系统调用。如果系统调用不能被重新运行,实际的返回值为EINTR。
明天继续。什么时候停下脚步,听一下天空大地的声音。
God bless you!
阅读(2419) | 评论(0) | 转发(0) |