none
IO完了ポート間の移動について RRS feed

  • 質問

  • 一度IO完了ポートに追加したデバイスを、ほかのIO完了ポートに移動する方法はあるでしょうか?

    コードで表しますと以下です。

     

    #define _WINSOCKAPI_
    #include <windows.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32")
    #include <iostream>
    
    int wmain()
    {
     using namespace std;
    
     HANDLE completion_port_1 = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE,
                               nullptr, 0, 0);
    
     HANDLE completion_port_2 = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE,
                               nullptr, 0, 0);
     {
      WSADATA wsa_data;
      ::WSAStartup((2 << 8) + 2, &wsa_data);
     }
    
     SOCKET socket = ::WSASocket(AF_INET,
                   SOCK_STREAM,
                   0,
                   nullptr, 0,
                   WSA_FLAG_OVERLAPPED);
    
     HANDLE err_check_1 = ::CreateIoCompletionPort(reinterpret_cast<HANDLE>(socket),
                            completion_port_1,
                            0, 0);
     //::CloseHandle(completion_port_1); // 閉じても移動できない
    
     // 新しい完了ポートに追加したい(移動)
     HANDLE err_check_2 = ::CreateIoCompletionPort(reinterpret_cast<HANDLE>(socket),
                            completion_port_2,
                            0, 0);
     if(nullptr != err_check_1) {
      wcout << L"success : completion_port_1" << endl;
     } else {
      wcout << L"failure : completion_port_1" << endl;
     }
    
     if(nullptr != err_check_2) {
      wcout << L"success : completion_port_2" << endl;
     } else {
      wcout << L"failure : completion_port_2" << endl;
     }
    
     ::WSACleanup();
    
     return 0;
    }
    
    

     

    デバイスリストに追加されているため、

    移動できないと思いCloseHandleしたのですが変わらずエラーが発生いたしました。

    ※このコードはサンプルです。

    2011年6月28日 5:39

すべての返信

  • レス付きませんねぇ(vv;)。
    この件、あまり詳しくはないのですが、
    「IO完了ポート」は、そのハンドル、IOのハンドル、IOするスレッド、IOの状態を感知したい
    スレッドの連携です。従って、感知側を除けは一蓮托生だと言う事ができるのではないでしょうか。
    この前提に立つと、「その破棄を含めて何も起こらない(又は起こらなかった)IOのハンドルと
    関連付けられたIO完了ポートのハンドルの作り直しができないという事実は、何か困る事態
    なのだろうか。」という事になります。
    実際に困っている事態を説明すると、もっとましな回答が得られるかもしれません。


    2011年7月4日 2:34