读书人

VC++编写服务器程序在accept()连接地

发布时间: 2012-04-27 11:57:44 作者: rapoo

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是否可读,进而进行超时控制!

读书人网 >VC/MFC

热点推荐