紧急请教关于Mobile 上socket connect超时问题
程序启动GPRS后,用非阻塞的socket 连接服务器时,connect函数调用超时,我用的select方式。代码如下:unsigned long mode = 1;
fd_set writefds;
timeval timeout;
if(!m_ConnectManager.GetConnMgrAvailable())
{
return NL_ERROR_NET_USE;
}
m_sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_sock == INVALID_SOCKET)
{
return NL_ERROR_SYSTEM;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr(pHostName);
clientService.sin_port = htons( m_port);
if (ioctlsocket(m_sock, FIONBIO, &mode) == SOCKET_ERROR)
{
return NL_ERROR_SYSTEM;
}
//启动GPRS
ConnMgrEstablishConnectionSync(。。。。。)
//并且启动成功
if(connect(m_sock, (SOCKADDR*)&clientService,sizeof(clientService)) == 0)
{
return NL_ERROR_SUCCESS;
}
FD_ZERO(&writefds);
FD_SET(m_sock, &writefds);
ret = select(0,NULL, &writefds,NULL, &timeout);
if(ret < 0)
{
return NL_ERROR_SYSTEM;
}
else if(ret > 0)
{
if (FD_ISSET(m_sock,&writefds))
{
return NL_ERROR_SUCCESS ;
}
}
else
{
//在这里超时了。
DisconnectGPRS(TRUE);
return;
}
但是我换成MFC的CSocket来实现就没有问题,不知道为什么。求过路高手指点一二。 --------------------编程问答-------------------- 用API来做SOCKET确实会有这样的问题,一般的连接超时好像在40秒。
MFC能解决超时的问题,还真不知道 --------------------编程问答-------------------- 没可能啊,MFC也是封闭的API啊。
补充:移动开发 , Windows Phone