大家早上好。问个问题程序使用了完成端口,但如果发生IP变化后,清理并且再次启用工作应该怎么做。要重建完成端口,关闭工作线程吗?谢谢

解决方案 »

  1.   

    是的,IP变化了所有连接就中断了,SOCKET就失效了,对应的IOCP对象也就无效了,应该释放.
    获得新IP之后,有了对应的SOCKET,要重新创建IOCP的Handle,其实也就是重新创建IOCP对象
      

  2.   

    ip变化的话,就shutdown再start就可以了
      

  3.   

    ip变化跟iocp的句柄没关系。把socket关闭,重新投递请求就行了。工作线程不用动,完成端口也不用重建。
      

  4.   

    创建SOCKET,绑定IP时不要指定IP,用INADDR_ANY
      

  5.   

    CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
    CreateIoCompletionPort((HANDLE)sClient, CompletionPort, (DWORD)sClient, 0);    //sClient是侦听到的client的socket
    感觉和ip变化没关系啊,如果有关系的话,只需本地(服务端)的socket从新绑定(bind)再listen,accept新的client就可以了。然后新的client的socket再和iocp绑定。