尝试连接到无法访问的计算机时,C ++套接字连接卡住了

时间:2017-11-29 15:53:15

标签: c++ sockets networking ip

源代码:

    bool Helper::connectToAComputer(char* destIpString, char* srcIpString)
{
    int iResult = 0;
    u_long iMode = 1;
    SOCKET ConnectSocket = INVALID_SOCKET;
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ConnectSocket == INVALID_SOCKET) 
    {
        wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
        //return NULL;
    }

    sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr(destIpString);
    clientService.sin_port = htons(22223);

    iResult = connect(ConnectSocket, (SOCKADDR *)& clientService, sizeof(clientService));
    if (iResult == SOCKET_ERROR)
    {
        wprintf(L"connect function failed with error: %ld\n", WSAGetLastError());
    }

    closesocket(ConnectSocket);
    return false;
}

我正在编写一个程序,它将检查所有本地IP地址,以查看本地网络上的计算机或设备。我写了这个连接到套接字的函数。

问题是当套接字尝试连接到不属于任何设备的IP时,程序就会停止并等待连接线。它可以连接到计算机拥有的IP。我希望函数告诉我连接是否成功而不是挂起和等待。

1 个答案:

答案 0 :(得分:0)

大约一分钟后它会超时。在进行连接后,您可以通过使用非阻塞模式和select()来实现可写性,以及超时。