首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC++编写服务器程序,在accept()连接地方如何避免超时

2012-04-27 
VC++编写服务器程序,在accept()连接地方如何处理超时?编了一个服务器端的程序,accept()是放在线程中的,监

VC++编写服务器程序,在accept()连接地方如何处理超时?
编了一个服务器端的程序,accept()是放在线程中的,监听客户端的服务请求,但是不处理的话,服务器端运行到accept(),如果没有客户端连接的话,一直在accept()地方等待,死在那个地方,所以请教高手,accept()的超时是如何设置的,假设设超时时间为6分钟,六分钟到的时候,直接跳到accept()的下一句执行或是直接跳出线程。以下是线程函数,请高手指点!

C/C++ code
UINT con_RecvThread(LPVOID pParam)            //线程{         cThread->c_sockConn=accept(cThread->c_sockSrv,(sockaddr*)&cThread->c_addrSrv,&(cThread->c_addrlen));    CString a=inet_ntoa(cThread->c_addrSrv.sin_addr);    if(cThread->c_sockConn!=INVALID_SOCKET)    {                    //开始接收        unsigned char c_RecvBuff[c_RecvBuffLen] = {0};        while(ss>0)        {   //循环接收数据            memset(c_RecvBuff,'\0',sizeof(c_RecvBuff));            //memset(cThread->c_store,'\0',sizeof(c_RecvBuff));                int nNetTimeout=60000;//超时设置60秒              setsockopt(cThread->c_sockConn,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));              ss = recv(cThread->c_sockConn,(char *)c_RecvBuff,c_RecvBuffLen,0);//返回ss为本次实际接收数据长                 }    else    {        cThread->CID="连接失败";    }            return 0;}


谢谢!

[解决办法]
setsockopt
[解决办法]
可以用select来处理的,当有连接时select会直接返回,没有连接时会超时返回
[解决办法]
楼主google一下select异步模型,
[解决办法]
探讨

可以用select来处理的,当有连接时select会直接返回,没有连接时会超时返回

[解决办法]
使用select模型,查看socket是否可读,进而进行超时控制!

热点排行