bind(0)函数返回一个使用过的临时端口

时间:2016-05-10 07:09:59

标签: c++ sockets udp port bind

我的udp服务器需要为每个客户端生成一个临时的未使用端口,所以我用零端口绑定来获取它。但绑定函数有时会返回一个使用过的端口,因此客户端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;
}   

0 个答案:

没有答案