如何修复 'Cannot assign requested address?'
How to fix 'Cannot assign requested address?'
确认 IP 地址和端口均未被 netstat -a -n.
使用时,当我使用 gdb 并中断调用 bind 的方法时,我看到使用了正确的 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,
Breakpoint 1, CSocket::Bind (this=0x819fa24, ipAddress="192.0.2.77",
port=4185) at Socket.cpp:126
这是上面代码中的 TRACE_ERROR
ERROR: Failed to bind to socket. errno 99 (Cannot assign requested address).
IpAddress 192.0.2.77 Port 4185 AddrLength 16
我一直在重读 Beej's Guide to Network Programming 但没有找到任何线索。这是 UDP,因此不需要绑定连接。防火墙已关闭。我还应该去哪里找?
根据@Aconcagua 所说:您想绑定一个本地地址(不是 "not in use" 的地址)。你不能随便编一个本地地址。您可以使用 INADDR_ANY
绑定到任何地址,或者您需要绑定一个分配给您的本地接口之一的地址。这可能是问题所在。 (bind
设置本地地址,connect
设置远程地址——或者,对于 UDP,您可以使用 sendto
指定每个数据包的远程地址。) – Gil Hamilton
确认 IP 地址和端口均未被 netstat -a -n.
使用时,当我使用 gdb 并中断调用 bind 的方法时,我看到使用了正确的 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,
Breakpoint 1, CSocket::Bind (this=0x819fa24, ipAddress="192.0.2.77", port=4185) at Socket.cpp:126
这是上面代码中的 TRACE_ERROR
ERROR: Failed to bind to socket. errno 99 (Cannot assign requested address). IpAddress 192.0.2.77 Port 4185 AddrLength 16
我一直在重读 Beej's Guide to Network Programming 但没有找到任何线索。这是 UDP,因此不需要绑定连接。防火墙已关闭。我还应该去哪里找?
根据@Aconcagua 所说:您想绑定一个本地地址(不是 "not in use" 的地址)。你不能随便编一个本地地址。您可以使用 INADDR_ANY
绑定到任何地址,或者您需要绑定一个分配给您的本地接口之一的地址。这可能是问题所在。 (bind
设置本地地址,connect
设置远程地址——或者,对于 UDP,您可以使用 sendto
指定每个数据包的远程地址。) – Gil Hamilton