一度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したのですが変わらずエラーが発生いたしました。
※このコードはサンプルです。