求助,RAS的API如何获得一个正在断开的连接是否已完全断开?
事情是这样的:
偶的机器上插着3G上网卡,偶用RAS的API实现了程序启动时自动拨号的功能,现在偶要在偶的程序里加入连接断开后自动重新拨号的功能,开一个后台线程,隔一段时间用RasEnumConnections检测连接,如果检测出的连接没有,那个我想要连接的连接,那么就用RasDial进行重新连接,但是,现在问题来了:
如果在我拨号成功以后,用户右击右下角任务栏中的连接图标点击“断开”,那么要过一段时间这个连接才会断开,图标也消失,在这段时间里,我的程序不因为用RasEnumConnections找到的活动连接中没有正在断开的这个连接,所以后台进程自动进行重新连接,问题是,在用户点击“断开”但是连接还没有完全断开的这段时间里,用RasDial对其进行异步连接,用RasGetConnectionStatus对连接句柄进行状态检测,每次检测到的RASCONNSTATUS结构体的rasconnstate成员结果都是RASCS_Connected,即连接已成功。也就是说,在连接将要断开还未断开的时候检测连接状态就得到连接已成功的状态,如果据此结果返回给用户状态信息,用户就会被误导,觉得连接已成功!
虽然说我的后台程序是在不断用RasEnumConnections枚举已连接的连接,这样每隔一定时间没有找到要连接的连接即会进行重连,这样最终一定是会重连成功的,可是连接将要断开还未断开的途中根本无法返回给用户正确的状态信息,请问:如何检测到“正在断开”这个状态,枚举成员rasconnstate里面似乎没有有关“正在断开”这样一个状态的值,请问如何检测“正在断开”这个状态。
还有,请问如何让RasGetConnectionStatus得到的状态结构体的rasconnstate枚举成员返回RASCS_Disconnected,即已断开的结果?什么情况下能得到这个结果?因为RasGetConnectionStatus只能由连接句柄HRASCONN返回连接状态,而连接句柄只能由RasEnumConnections和RasDial这两个函数获得,可是这两个函数所获得的均是已连接或连接成功的连接的句柄,这样一来,不是根本无法获得已断开的连接的连接句柄了吗,因为我不能得到已断开的连接的连接句柄,所以我根本不可能让RasGetConnectionStatus返回RASCS_Disconnected状态啊!这样给了这样一个可能值还有什么意义呢?
请问诸位是不是RASCS_Disconnected这个值根本无法获得啊?还是说还有其他的API能返回这个值?如果有,望告知,获得“已断开”和“正在断开”这两个状态对我来说很重要,谢谢了!
补充:即使用RasHangUp将一个连接句柄挂断连接以后,再用RasGetConnectionStatus也是无法获得RASCS_Disconnected这个状态的!获得的只有RASCS_Connected,这不根本就是误导吗,不知道是不是ms的RAS函数这里出现了bug,真心求教!