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