- 论坛徽章:
- 0
|
在LINUX下建立一个套接字skfd,然后连接上SERVER,在使用select 等待套接字描述符skfd变为可读时,如果另外一个线程探测配置文件里面SERVER地址有变化,需要立即重新建立连接,我采用立即关闭现有套接字skfd,然后重新建立套接字skfd连接新的地址的方式,我想问的是:在我CLIENT端关闭skfd时,此时select正在skfd上等待,关闭后skfd后,select会立即返回吗?根据我测试的结果,好象select不会立即返回,一直会等待超时的,各位大侠能告诉我其中的原因吗?
如果我设置select的超时时间比较长,在超时之前,新的套接字skfd已经连接上了新的SERVER,此时新的SERVER给我发送信息时,我这边暂时没有反应,在select的超时返回后,居然回返回新的skfd可读,于是又可以正常的收发数据,请问这又是为什么?要知道这可是两个不同的套接字啊,虽然他们的描述符名字都是skfd,这让我想不通,这可能需要知道select()是如何实现的。
第三个问题:需要立即重新连接SERVER时,我采用立即关闭现有套接字skfd,然后重新建立套接字skfd连接新的地址的方式,这样的方法合适吗?因为此时设备最好不要中断,还有其他的模块要运行,有没有其他好的方法? |
|