У нас есть некоторый старый последовательный код, который проверяет, доступен ли последовательный порт, просто открыв его и закрыв. Теперь мы добавляем поддержку сети в приложение. Я хочу повторно использовать функцию, указав 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?