我编写了一个使用 GNU C 套接字库中的 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;
谢谢,亚历克斯