日期:2014-05-16  浏览次数:20756 次

socket 編程 connect錯誤
运行中有时候会报[115][Operation now in progress]这个错误
我用的是多进程的方式,需要链接时就fork一个连接
connect用的是阻塞的方式,网上查了好多资料都是非阻塞的情况才会报这个错误
实在不明白原因
代码:
if ((ilSockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
  printf("server socket errno=[%d], err=[%s]", errno, strerror(errno) );
  exit(-1);
}
timev.tv_sec = iTimeOut; //iTimeOut = 60
timev.tv_usec = 0;
if( (iRet=setsockopt(ilSockfd, SOL_SOCKET, SO_RCVTIMEO, &timev, sizeof(struct timeval))) < 0)
{
printf("server setsockopt errno=[%d], err=[%s] iRet=[%d]", errno, strerror(errno), iRet );
close(ilSockfd);
exit(-1);
}
sock_descriptor=ilSockfd;
memset ((char *)&serv_addr, 0x00, sizeof(struct sockaddr_in) );
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(Ip);
serv_addr.sin_port = htons( Port );
if ((connect(sock_descriptor, (struct sockaddr *) &serv_addr, sizeof(serv_addr))) < 0 )
{
printf("[ERROR]:与监控服务程序建立连接出错[%d][%s]",errno,strerror(errno));
close(sock_descriptor);
exit(-1);
}


------解决方案--------------------
if( (iRet=setsockopt(ilSockfd, SOL_SOCKET, SO_RCVTIMEO, &timev, sizeof(struct timeval))) < 0)
{
printf("server setsockopt errno=[%d], err=[%s] iRet=[%d]", errno, strerror(errno), iRet );
close(ilSockfd);
exit(-1);
}

去掉这个?