0

私はこのコードを持っています:

bool CBSocketConnect(uint64_t socketID,uint8_t * IP,bool IPv6,uint16_t port){
    // Create sockaddr_in6 information for a IPv6 address
    int res;
    if (IPv6) {
        struct sockaddr_in6 address;
        memset(&address, 0, sizeof(address)); // Clear structure.
        address.sin6_family = AF_INET6;
        memcpy(&address.sin6_addr, IP, 16); // Move IP address into place.
        address.sin6_port = htons(port); // Port number to network order
        res = connect((evutil_socket_t)socketID, (struct sockaddr *)&address, sizeof(address));
    }else{
        struct sockaddr_in address;
        memset(&address, 0, sizeof(address)); // Clear structure.
        address.sin_family = AF_INET;
        memcpy(&address.sin_addr, IP + 12, 4); // Move IP address into place. Last 4 bytes for IPv4.
        address.sin_port = htons(port); // Port number to network order
        res = connect((evutil_socket_t)socketID, (struct sockaddr *)&address, sizeof(address));
    }
    if (NOT res || errno == EINPROGRESS)
        return true;
    return false;
}

IPv6 を false に設定し、IP を ::ffff:127.0.0.1 (IPv4 ループバック アドレス) に設定し、ポート番号を 45562 に設定し、res を -1 に設定し、errno を ENOENT (2) に設定します。これはなぜでしょうか?

私が使用しているプラ​​ットフォームは OSX Mountain Lion です。libevent バージョン「2.0.19-stable」のソケットを使用しています。

ありがとうございました。

4

1 に答える 1

0

問題が見つかりました: LLDB

LLDB は errno が ENOENT であると言っていましたが、GDB を使用すると (明らかにそうすべきです)、errno は EINPROGRESS であると言われました! ずっと大丈夫でした。それはすべてデバッガーのせいでした。

教訓: GDB を使用し、決して LLDB を使用しないでください。

于 2012-08-12T13:32:52.447 に答える