Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ bind(0)函数返回已使用的临时端口_C++_Sockets_Udp_Port_Bind - Fatal编程技术网

C++ bind(0)函数返回已使用的临时端口

C++ bind(0)函数返回已使用的临时端口,c++,sockets,udp,port,bind,C++,Sockets,Udp,Port,Bind,我的udp服务器需要为每个客户机生成一个临时未使用的端口,因此我使用zero port绑定它。但是bind函数有时返回一个使用过的端口,因此客户端a接收到本应发送给客户端B的数据 int _fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (_fd < 0) { return false; } INT reuse = 1; INT ret = setsockopt(_fd, SOL_SOCKET, SO_REUSEAD

我的udp服务器需要为每个客户机生成一个临时未使用的端口,因此我使用zero port绑定它。但是bind函数有时返回一个使用过的端口,因此客户端a接收到本应发送给客户端B的数据

int _fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (_fd < 0)
{   
    return false;
}   

INT reuse = 1;
INT ret = setsockopt(_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
if (ret == -1) 
{   
    return false;
}   

sockaddr_in local_addr;
int addr_len = sizeof(sockaddr_in);
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = inet_addr(ip.c_str());
if (::bind(_fd, (sockaddr *) &local_addr, sizeof(local_addr)) == -1) 
{   
    return false;
}   

if (::getsockname(_fd, (sockaddr*)&local_addr, &addr_len) == -1) 
{   
    return false;
}   
int\u fd=socket(AF\u INET、SOCK\DGRAM、IPPROTO\u UDP);
如果(_fd<0)
{   
返回false;
}   
INT=1;
INT ret=setsockopt(_fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
如果(ret==-1)
{   
返回false;
}   
本地地址中的sockaddr\u;
int addr_len=sizeof(sockaddr_in);
本地地址sin家庭=AF\u INET;
local_addr.sin_addr.s_addr=inet_addr(ip.c_str());
if(::bind(_fd,(sockaddr*)和local_addr,sizeof(local_addr))=-1)
{   
返回false;
}   
if(::getsockname(_fd,(sockaddr*)和local_addr,&addr_len)=-1)
{   
返回false;
}   

您没有将local\u addr post设置为0,是吗?没有,我以为0是sockaddr\u in的端口的默认值。@WenJuanWu
struct
成员没有默认值,而且它是
中的
struct sockaddr\u这一事实不可能改变这一点。显式地将其设置为零并重新测试。谢谢,我会尝试并告诉您结果。是的,它工作正常,非常感谢!您没有将local_addr post设置为0,是吗?没有,我以为0是sockaddr_在的端口中的默认值。@WenJuanWu
struct
成员没有默认值,而且它是
struct sockaddr_in
的事实不可能改变这一点。显式地将其设置为零并重新测试。谢谢,我会尝试并告诉您结果。是的,它工作正常,非常感谢!