netstat -a -n.
确认IP地址和端口都没有被使用当我在调用bind的方法中使用gdb和break时,我看到正在使用正确的IP地址和端口以及合理的套接字地址长度16.这是一个UDP侦听器。远程IP是静态的,并从配置文件中读取。
这是代码,
void CSocket::Bind(IpEndPoint& endPoint)
{
int bindResult = bind( socketHandle, endPoint.GetSockAddrPtr(),
endPoint.GetAddrLength());
if(bindResult < 0)
{
TRACE_ERROR("Failed to bind to socket. %s. IpAddress %s Port %d AddrLength %d",
strerror(errno), endPoint.GetIpAddressString(),
ntohs(endPoint.GetPort()), endPoint.GetAddrLength());
这是来自gdb,
断点1,CSocket :: Bind(这= 0x819fa24,ipAddress =&#34; 192.0.2.77&#34;, port = 4185)在Socket.cpp:126
这是上面代码中的TRACE_ERROR
错误:无法绑定到套接字。 errno 99(无法分配请求的地址)。 IpAddress 192.0.2.77 Port 4185 AddrLength 16
我一直在重读Beej's Guide to Network Programming,但没有找到线索。这是UDP,因此不需要绑定连接。防火墙已关闭。我还应该在哪儿看?
答案 0 :(得分:1)
关于@Aconcagua所说的内容:你想要绑定一个本地地址(不是那个“未使用”的地址)。你不能只是组成一个本地地址。您可以使用INADDR_ANY
绑定到任何地址,或者需要绑定分配给其中一个本地接口的地址。这可能是问题所在。 (bind
设置本地地址,connect
设置远程地址 - 或者,使用UDP,您可以使用sendto
指定每个数据包的远程地址。) - Gil Hamilton