我编写了一个使用GNU C套接字库中的TCP套接字的应用程序。它只是基于侦听传入请求的套接字。我能够在localhost上使用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;
谢谢, 亚历