当前位置:编程学习 > wap >>

紧急请教关于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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,