シリアルポートを開いてから閉じるだけで、シリアルポートが使用可能かどうかを確認する古いシリアルコードがあります。今、ネットワーク サポートをアプリに追加しています。IP アドレスを文字列として指定することで関数を再利用したいと考えています。
/**
* So far I have tried:
* A passed in portPath normally looks like:
\\?\acpi#pnp0501#1#1#{GUID}
10.2.0.155:2001
//10.2.0.155:2001/
\\.\10.2.0.155:2001\
\\?\10.2.0.155:2001\
* all without success.
*/
bool PortIsAvailable( const CString& portPath )
{
HANDLE hCom = ::CreateFile( portPath,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // not overlapped I/O
NULL ); // hTemplate must be NULL for comm devices
if (INVALID_HANDLE_VALUE != hCom )
{
::CloseHandle( hCom );
return true;
}
return false;
}
connect に続いて shutdown を使用できることはわかっていますが、最小限の変更で関数を再利用したいと考えています。関数を再利用できれば、なおさらです。そうでない場合は、ソケットかどうかを判断するコードを作成する必要があります。
CreateFile を介してソケットを開く正しい方法は何だろうと思っていました。