我试图用多个TCP连接创建Linux工具,它支持IPv4和IPv6,因此我选择使用“sockaddr_storage”。Linux,C,socket:如何使用结构指定TCP客户端端口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()'或者朋友,并且不会像成功一样继续。 – EJP
这只是原型代码。但无论如何,感谢您的建议,检查错误代码。 –
不要欺骗自己。你只在调试完成后才把错误检查放进去?你现在需要错误信息*。这就是为什么你不得不问这个问题。 – EJP