gpt4 book ai didi

c++ -::socket 返回 0 并且::connect 将 errno 设置为 EBADF

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:50 24 4
gpt4 key购买 nike

我正在使用 BSD 套接字,我想使用 ::connect 连接到端口 80 上的 example.com::的手册页socket 告诉我它返回一个有效的文件描述符,或者在错误时返回 -1

auto fd = ::socket(AF_INET, SOCK_STREAM, 0);

struct ::sockaddr_in addr;
::bzero(&addr, sizeof(addr));
addr.sin_family = family_;

struct ::hostent* hostent = ::gethostbyname(host.c_str());
::bcopy(hostent->h_addr, &addr.sin_addr.s_addr, hostent->h_length);
addr.sin_port = port;

auto err = ::connect(fd,
reinterpret_cast<struct ::sockaddr*>(&addr),
sizeof(addr));

fd == 0,所以 ::socket 成功(否则它会返回 -1)。但是,err == -1errno 被设置为 EBADF,表明 fd 是一个错误的文件描述符.

这里可能发生了什么?为什么 ::connect 告诉我我给了它一个错误的文件描述符,而我显然没有?

最佳答案

您应该确认 socket 实际上 返回 0?除非您关闭了标准文件描述符,否则这将是非常不寻常的。确保在套接字调用后立即检查它,以防它被其他调用损坏。

关于c++ -::socket 返回 0 并且::connect 将 errno 设置为 EBADF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com