linux c 连接超时。。。没有效果!哪儿的问题哦

xengine-qyt 2017-03-09 10:24:51


HMSDATACORE_CLIENT *pSt_Client = new HMSDATACORE_CLIENT;
if (NULL == pSt_Client)
{
return FALSE;
}
memset(pSt_Client,'\0',sizeof(HMSDATACORE_CLIENT));

pSt_Client->pClass_This = this;
pSt_Client->bIsConnect = FALSE;
pSt_Client->bHBRun = FALSE;
pSt_Client->hSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (INVALID_SOCKET == pSt_Client->hSocket)
{
return FALSE;
}
struct sockaddr_in st_SockServiceAddr;
st_SockServiceAddr.sin_addr.s_addr = inet_addr(lpszServiceAddr);
st_SockServiceAddr.sin_port = htons(nPort);
st_SockServiceAddr.sin_family = AF_INET;

unsigned long ulFin = 1;
if (SOCKET_ERROR == ioctl(pSt_Client->hSocket, FIONBIO, (unsigned long*)&ulFin))
{
return FALSE;
}
connect(pSt_Client->hSocket,(sockaddr *)&st_SockServiceAddr,sizeof(st_SockServiceAddr))
struct timeval st_Timeout;
fd_set st_SetRead;
fd_set st_SetWrite;

FD_ZERO(&st_SetRead);
FD_ZERO(&st_SetWrite);
FD_SET(pSt_Client->hSocket, &st_SetRead);
FD_SET(pSt_Client->hSocket, &st_SetWrite);

st_Timeout.tv_sec = 6;
st_Timeout.tv_usec = 0;
int nRet = select(pSt_Client->hSocket, &st_SetRead, &st_SetWrite, NULL, &st_Timeout);
if (nRet <= 0)
{
return FALSE;
}
if(!FD_ISSET(pSt_Client->hSocket, &st_SetWrite))
{
return FALSE;
}
}

ulFin = 0;
if (SOCKET_ERROR == ioctl(pSt_Client->hSocket, FIONBIO, (unsigned long*)&ulFin))
{
return FALSE;
}



上面的代码哪儿有问题吗? 杂不行呢
...全文
391 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2017-03-27
  • 打赏
  • 举报
回复
sorry,使用long int *好像也没有什么问题(在小端机器上),请忽略#5楼的内容。
nswcfd 2017-03-27
  • 打赏
  • 举报
回复
0x00005421 FIONBIO const int * 不是long *
renwotao2009 2017-03-24
  • 打赏
  • 举报
回复
是select超时吗?如果是select返回0则为超时情况
xengine-qyt 2017-03-23
  • 打赏
  • 举报
回复
你们在说什么?
jamon_tan 2017-03-13
  • 打赏
  • 举报
回复
unsigned long ulFin = 1; if (SOCKET_ERROR == ioctl(pSt_Client->hSocket, FIONBIO, (unsigned long*)&ulFin)) { return FALSE; } 第三个参数0表示阻塞,1表示非阻塞
fenggui918 2017-03-10
  • 打赏
  • 举报
回复
unsigned long ulFin = 1; if (SOCKET_ERROR == ioctl(pSt_Client->hSocket, FIONBIO, (unsigned long*)&ulFin)) { return FALSE; } 连接前用0 试试

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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