【发布时间】:2016-05-13 09:50:20
【问题描述】:
我正在尝试创建具有多个 TCP 连接的 Linux 工具,它同时支持 IPv4 和 IPv6,因此我选择使用“sockaddr_storage”。
现在,我的问题是,如何将客户端套接字绑定到指定(或随机)的 TCP 端口?
对于 TCP 客户端,在一个线程中,如果我只创建 10 个套接字然后 connect() 到服务器,那么这 10 个套接字将在客户端使用顺序 TCP 端口,例如,从 54594 开始,然后是 54596、54600 , 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 的系统调用都应该导致您调用
perror()或朋友,并且不会像成功一样继续。 -
这只是原型代码。但无论如何,感谢您检查错误代码的建议。
-
别自欺欺人。您只有在调试后才进行错误检查?您现在就需要错误消息。这就是您必须提出这个问题的原因。