gcc下connect时间太长,怎么办啊

ckc 2002-10-29 08:37:54
redhat linux 7.1下gcc 2.96
connect一个地址,如果成功connect时间就比较短,如果connect不上,时间太长,我试过居然要3分钟左右才执行完。
有什么办法可以缩短这个时间?
...全文
117 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cool_killer 2002-10-30
  • 打赏
  • 举报
回复
static void connect_alarm(int signal)
{
siglongjmp(jmp_env, 1);
printf("connect time out\n");
exit(-1);
}

int init_sock(char *host,int port_id)
{
static int i_called = 0;

int tmp_id,socket_fd;
struct sockaddr_in serv_addr;
struct hostent *h = gethostbyname(host);

if(!h){
printf("Host name lookup failure for %s\n",host);
return -1;
}
printf("tmp_id = %d port_id =%d\n",tmp_id,port_id);
memset((char *) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
memcpy(&(serv_addr.sin_addr.s_addr), h->h_addr, h->h_length);
serv_addr.sin_port = htons(port_id+tmp_id);
if ( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("TcpClient: can't open stream socket");
return -2;
}

signal(SIGALRM, connect_alarm);
alarm(60);
if(sigsetjmp(jmp_env, 1))
{
printf("TcpClient: connect() timed out");
goto done;
}


if (connect(socket_fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
printf("TcpClient: can't connect to server : %s",strerror(errno ));
return -3;
}
return socket_fd;
done:
alarm(0);
};
sans 2002-10-29
  • 打赏
  • 举报
回复
使用异步方式,connect后执行select,设置select的writefds参数监视connect动作,并设置timeout,如果connect不上,在timeout范围内可以马上知道。
ckc 2002-10-29
  • 打赏
  • 举报
回复
如何使用异步方式?哪个函数啊
pi1ot 2002-10-29
  • 打赏
  • 举报
回复
这和gcc有什么关系

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧