Berkeley套接字:connect()返回-1,errno设置为ENOENT

时间:2012-08-11 18:46:05

标签: c sockets berkeley-sockets

我有这段代码:

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”的套接字。

谢谢。

1 个答案:

答案 0 :(得分:0)

我发现了问题:LLDB

LLDB告诉我errno是ENOENT但是当我使用GDB时(我显然应该)它告诉我errno是EINPROGRESS!一直都没关系。这是调试器的全部错误。

课程:使用GDB而不是LLDB。