Linux,C,socket:如何使用结构sockaddr_storage

时间:2016-02-03 23:41:55

标签: c linux sockets tcp port

我正在尝试创建具有多个TCP连接的Linux工具,它支持IPv4和IPv6,因此我选择使用“sockaddr_storage”。

现在,我的问题是,如何将客户端套接字绑定到指定(或随机)TCP端口?

对于TCP客户端,在一个线程中,如果我只创建10个套接字然后connect()到服务器,那么这10个套接字将使用客户端的顺序TCP端口,例如,从54594开始,然后是54596,54400 ,54602等。

现在,我想将这些客户端套接字绑定到不同的(随机)TCP端口,如何处理sockaddr_storage?

谢谢!

=============添加代码============

struct sockaddr_storage local_addr; 

sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)    

(*(struct sockaddr_in*)&local_addr).sin_port = 0;
local_addr_size = sizeof(local_addr);
bind(sockfd, (struct sockaddr *)&local_addr, local_addr_size);

............
connect(sockfd, p->ai_addr, p->ai_addrlen)

1 个答案:

答案 0 :(得分:1)

  

我想将这些客户端套接字绑定到不同的(随机的)TCP端口

当您在未先致电connect()的情况下致电bind()时会自动发生这种情况。您不需要为此编写任何代码,因此sockaddr_storage根本不会进入。