/*****************************************************
* 与网络加密机建立socket连接
******************************************************/
int sec_conn(int addr)
{
struct sockaddr_in dest_addr;
int sockfd = -1;
int retval;
fd_set allset;
struct timeval tv; InitSocket( );
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
/************************YANCP**********************/
int iWinsockErr = WSAGetLastError( ) ;
printf( "%d error when create listen socket !" , iWinsockErr ) ;
/***************************************************/
return -1;
}
memset((char *)&dest_addr, 0, sizeof(struct sockaddr_in));
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(SEC_PORT);
dest_addr.sin_addr.s_addr = addr;
/****************Yancp注释*************************/
//if(fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1)
// return -1; retval = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
if(retval<0) {
#ifdef DUMP
//printf("×与加密机连接失败×\n\n");
#endif
FD_ZERO(&allset);
FD_SET(sockfd, &allset);
tv.tv_sec = SEC_TIMEOUT;
tv.tv_usec = 0;
if(select(sockfd + 1, NULL, &allset, NULL, &tv) <= 0) {
return -1;
}
RtcsInitTcp(sockfd);
return sockfd;
}
RtcsInitTcp(sockfd);
return sockfd;
}我的环境如下:xp sp2,vc6.0很令人不解的是老是在retval = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));发生问题,也就是connect的返回值永远都小于0.可是在公司其他人的两台机器上一台2000,一台xp上都顺利通过,不知道是我得系统问题还是其他问题?
* 与网络加密机建立socket连接
******************************************************/
int sec_conn(int addr)
{
struct sockaddr_in dest_addr;
int sockfd = -1;
int retval;
fd_set allset;
struct timeval tv; InitSocket( );
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
/************************YANCP**********************/
int iWinsockErr = WSAGetLastError( ) ;
printf( "%d error when create listen socket !" , iWinsockErr ) ;
/***************************************************/
return -1;
}
memset((char *)&dest_addr, 0, sizeof(struct sockaddr_in));
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(SEC_PORT);
dest_addr.sin_addr.s_addr = addr;
/****************Yancp注释*************************/
//if(fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1)
// return -1; retval = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
if(retval<0) {
#ifdef DUMP
//printf("×与加密机连接失败×\n\n");
#endif
FD_ZERO(&allset);
FD_SET(sockfd, &allset);
tv.tv_sec = SEC_TIMEOUT;
tv.tv_usec = 0;
if(select(sockfd + 1, NULL, &allset, NULL, &tv) <= 0) {
return -1;
}
RtcsInitTcp(sockfd);
return sockfd;
}
RtcsInitTcp(sockfd);
return sockfd;
}我的环境如下:xp sp2,vc6.0很令人不解的是老是在retval = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));发生问题,也就是connect的返回值永远都小于0.可是在公司其他人的两台机器上一台2000,一台xp上都顺利通过,不知道是我得系统问题还是其他问题?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货