CreateFileを使用してソケットを開きます。
-
21-08-2019 - |
質問
私たちは、シリアルポートがそれを開いて、それを閉じることにより簡単に利用できるかどうかをチェックするいくつかの古いシリアルコードを持っています。今、私たちは、私は、文字列として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;
}
私は、シャットダウンが続くが、私は最小限の変更で機能を再利用したい接続し使用することができます知っています。私はそんなに良く機能を再利用することができます。いない場合、私はそれがソケットであるか否かを判断するコードを記述する必要があります。
の私はCreateFileを介して、ソケットを開く正しい方法とは何か不思議でしたか?の
解決
あなたはCreateFileを介して、ソケットを作成することはできません。あなたは、このための窓ソケットAPI を使用する必要があります目的。 SOCKETハンドルを作成するためには、使用やWSASocketする 。 Windowsは、いくつかの<のhref =「http://msdn.microsoft.com/en-us/library/ms740522(VS.85).aspx」のrel =」でハンドルと、この関数によって返されたソケットを使用できることに注意してくださいこのようReadFile関数やWriteFile関数のようnoreferrer nofollowを "> Windowsの機能、。
他のヒント
私はあなたがCreateFile()
でソケットを操作することができると信じていません。ソケットは、BSD(IIRC)からインポートおよび名前互換の方法で実装抽象ある(本来winsock.h
を介して、現在winsock2.h
)。私は、MSが今までCreateFile()
にソケットのサポートを追加しないと思います。
その他の根拠:ほとんどの(?すべて)CreateFile()
操作するには、ネイティブのWindowsハンドルを返します。ソケットが非ネイティブ抽象化されているので、彼らはOSでネイティブのハンドルを持っていないので、CreateFile()
はそれらを処理することは意味がありません。