Sto utilizzando TCP/IP su ActiveSync per connettermi dal dispositivo Windows CE al desktop di Windows XP. La funzione connect() di WinSock ha sempre esito positivo, indipendentemente dal fatto che l'applicazione server desktop sia effettivamente in esecuzione.Il socket connect() ha sempre esito positivo (TCP su ActiveSync)
Il seguente codice semplificato dimostra questo problema:
#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;
}
Si tratta di un bug? In caso contrario, qual è il modo corretto per determinare se il server è effettivamente online? Solo per provare ad usare la connessione stabilita (recv/send data)?
Dispositivo: Windows CE 5.0, WinSock 2.2; Desktop: Windows XP, SP3, ActiveSync 4.5.