GNUCソケットライブラリのTCPソケットを使用するアプリを作成しました。基本的には、着信要求をソケットでリッスンします。ローカルホストでtelnetを使用してソケットに接続できますが、別のマシンから接続しようとしても応答がありません。Fedora 13を実行していてファイアウォールを無効にしていますが、それでも機能しません。
ソケットコードは、他の組織によって作成され、すでに機能するはずのライブラリにカプセル化されていますが、その要点は次のとおりです。
...
fd_ = ::socket(AF_INET, SOCK_STREAM, 0);
if (fd_ < 0)
{
perror("socket");
return -1;
}
int val = 1;
int rc = setsockopt(fd_, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
if (rc < 0)
{
perror("sesockopt");
close();
return -1;
}
rc = setsockopt(fd_, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
if (rc < 0)
{
perror("sesockopt");
close();
return -1;
}
const int flags = ::fcntl(fd_, F_GETFL, 0);
::fcntl(fd_, F_SETFL, flags | O_NONBLOCK);
rc = ::bind(fd_, addr, addr.size_);
if (rc < 0)
{
perror("bind");
close();
return -1;
}
rc = ::listen(fd_, 10);
if (rc < 0)
{
perror("bind");
close();
return -1;
}
return 0;
ありがとう、アレックス