Я использую старую кроссплатформенную мобильную платформу (Rhomobile), которая поддерживает вызов API для определения наличия доступного сетевого подключения. Исходный код доступен, и я вижу, когда мы выполняем вызов для обнаружения соединения, мы изучаем результаты системного вызова на уровне ОС, чтобы установить сокет-соединение для данного URL-адреса и порта. Ранее это работало нормально, так как нашей конечной точкой был http. Теперь мы перенесли это в https и видим некоторые странные результаты. Звонок будет
struct addrinfo hints, *result = NULL, *ptr = NULL;
int sockfd = -1;
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
char szPortAsString[5 + 1];
snprintf(szPortAsString,5,"%d",m_iPort);
char* szHost = new char[m_szHost.length() + 1];
memset(szHost, 0, m_szHost.length() + 1);
strcpy(szHost, m_szHost.c_str());
int iResult = getaddrinfo(szHost, szPortAsString, &hints, &result);
...
sockfd = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
...
connect(sockfd, ptr->ai_addr, ptr->ai_addrlen);
и порт будет 443. Что мне неясно, будет ли принято соединение (нам не нужно передавать какие-либо данные) через конечную точку https, для которой требуется клиентский сертификат для отправки / получить данные.
Код можно найти здесь: https://github.com/rhomobile/rhodes/blob/3f5cf6ffa90cf8c648ac19c954932d101fc56b42/lib/commonAPI/coreapi/ext/platform/android/jni/NetworkDetect.cpp