c - Linux,C,套接字 : how to specify TCP client port with structure sockaddr_storage

标签 c linux sockets tcp port

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

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

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

现在,我想将这些客户端套接字绑定(bind)到不同的(随机的)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)

最佳答案

I would like to bind those client sockets to different (randomized) TCP ports

当您调用 connect() 而没有先调用 bind() 时,这会自动发生。您不需要为此编写任何代码,因此 sockaddr_storage 根本不会出现。

关于c - Linux,C,套接字 : how to specify TCP client port with structure sockaddr_storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189924/

相关文章:

c - 有没有办法让我的二进制文件对 Linux 中的某些全局热键使用react?

c - 从命令行读取参数并对特定值执行操作

linux - Linux Loadable 和内置模块的区别

FlashLite 2.x/3.0 跨域策略文件

java - java套接字的问题

无法从 netbeans 输入值,但在 cmd 中工作

c - ATtiny85 上的 ws2812b

linux - 如果多个子进程同时终止,wait() 会发生什么?

linux - 将 NFLOG pcap 转换为以太网 pcap

java - 套接字 - SocketException : Socket Closed - Java