BSDソケットを使用していて、ポート80での::connect
接続に使用したいと思います。のマニュアルページには、有効なファイル記述子またはエラーのいずれかが返されることが示されています。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 == -1
とerrno
はに設定されており、これは不正なファイル記述子であるEBADF
ことを示しています。fd
ここで何が起こっているのでしょうか?::connect
明らかに与えなかったのに、なぜ悪いファイル記述子を与えたと私に言うのですか?