Estoy usando TCP/IP sobre ActiveSync para conectarme desde el dispositivo con Windows CE al escritorio con Windows XP. La función WinSock connect() siempre tiene éxito, sin importar si la aplicación del servidor de escritorio se está ejecutando realmente.El socket connect() siempre tiene éxito (TCP sobre ActiveSync)
El siguiente código simplificado muestra este 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;
}
Es esto un error? Si no, ¿cuál es la forma correcta de determinar que el servidor está realmente en línea? ¿Solo para tratar de usar la conexión establecida (recv/send data)?
Dispositivo: Windows CE 5.0, WinSock 2.2; Escritorio: Windows XP, SP3, ActiveSync 4.5.