Socket connect () всегда успешно (TCP через ActiveSync) - PullRequest
5 голосов
/ 02 марта 2010

Я использую TCP / IP через ActiveSync для подключения с устройства Windows CE к рабочему столу Windows XP.Функция WinSock connect () всегда выполняется успешно, независимо от того, действительно ли запущено приложение настольного сервера.

Следующий упрощенный код демонстрирует эту проблему:

#include "stdafx.h"
#include <Winsock2.h>

int _tmain(int argc, _TCHAR* argv[])
{
    const int Port = 5555;
    const char * HostName = "ppp_peer";  

    WSADATA wsadata;
    if (WSAStartup(MAKEWORD(1, 1), &wsadata) != 0)
        return 1;

    struct hostent * hp = gethostbyname(HostName);
    if (hp == NULL)
        return 1;

    struct sockaddr_in sockaddr;
    memset(&sockaddr, 0, sizeof(sockaddr));
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
    sockaddr.sin_port = htons(Port);    

    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == SOCKET_ERROR)
        return 1;

    int result = connect(sock, (struct sockaddr*)&sockaddr, sizeof(sockaddr));
    // result always 0 (success) here

    closesocket(sock);

    return 0;
} 

Это ошибка?Если нет, как правильно определить, что сервер действительно подключен к сети?Только чтобы попытаться использовать установленное соединение (recv / send data)?

Устройство: Windows CE 5.0, WinSock 2.2;Рабочий стол: Windows XP, SP3, ActiveSync 4.5.

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Из того, что в IIRC, в ActiveSync есть ошибка, заключающаяся в том, что WM 5.0 считает, что он все еще подключен к серверу ActiveSync на настольном ПК с Windows, см. Этот ответ здесь на SO , который может обеспечить ключ и / или понимание этого и может объяснить, почему подключение через сокет всегда удается ...

0 голосов
/ 06 марта 2010

Итак, я не нашел способа проверить, является ли это «реальным» соединением, кроме как игнорировать эту проблему и попытаться использовать это соединение. Если оно не «реальное», связь не будет установлена.

...