如何解决如何在两个不同的地址上调用connect函数,并等待选择以找到在c
我有一个主机的两个IP地址,我想同时在两个主机上进行连接调用,然后使用select()等待它们,无论哪个IP首先返回,我都想连接该IP。有没有一种方法可以实现这种行为而无需线程处理,而只需执行select()/ connect()函数?
下面是伪代码:
create_connection()
{
struct addrinfo *adres = NULL;
struct addrinfo h;
struct addrinfo *p = NULL;
int res;
res = getaddrinfo(hostname,NULL,&h,&adres);
for(p=adres;p!=NULL;p=p->next)
{
int sock = -1;
tcp_create_conn(p->ai_addr,&sock,..);
}
}
tcp_create_conn(struct sockaddr *addr,int *sp,..)
{
fd_set my_set;
int res;
addr->sin_port = <default_port>;
*sp = lg_socket(addr->sa_family,SOCK_STREAM,IPPROTO_TCP);
\\bind
\\enable non blocking
while(connect(*sp,addr,get_len(addr))<0) {
if (errno == EINOPROGRESS)
do{
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO(&myset);
FD_SET(*sp,&myset);
res = select(*sp + 1,&myset,&tv);
if (res>0)
//connection is success
}while(1)
}
}
我想将两个地址从getaddrinfo(如果有两个地址)传递给tcp_create_conn(addr1,addr2,..),并在两个接口上调用connect并等待响应,无论哪个地址首先返回,我想要连接到该地址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。