fd_set fdread;
do
{
FD_ZERO(&fdread);
FD_SET(CONNSOCKET,&fdread);
struct timeval tv;
tv.tv_sec=6;
tv.tv_usec=0;
if( (nSelRet = select(0,&fdread,NULL,NULL,&tv)) == SOCKET_ERROR )
{
writeTolag("select error!");
break;
}
}while(nSelRet == 0);
if( nSelRet > 0 )
{
if( FD_ISSET(CONNSOCKET,&fdread) )
{
nRet = recv(CONNSOCKET, (char*)cHttpAccept, sizeof(cHttpAccept),0);
...}
}
为什么这样做recv还是会堵塞在那?是我用法不对吗???
do
{
FD_ZERO(&fdread);
FD_SET(CONNSOCKET,&fdread);
struct timeval tv;
tv.tv_sec=6;
tv.tv_usec=0;
if( (nSelRet = select(0,&fdread,NULL,NULL,&tv)) == SOCKET_ERROR )
{
writeTolag("select error!");
break;
}
}while(nSelRet == 0);
if( nSelRet > 0 )
{
if( FD_ISSET(CONNSOCKET,&fdread) )
{
nRet = recv(CONNSOCKET, (char*)cHttpAccept, sizeof(cHttpAccept),0);
...}
}
为什么这样做recv还是会堵塞在那?是我用法不对吗???
解决方案 »
- VC++6.0如何实现开启线程?
- 我安装vs2008后少文件,哪位大哥可以发给我的
- 求助:OUTLOOK EXPRESS 问题!【100分】
- ---!!!调用DLL的函数,MFC界面无响应,急救!!!---
- VC/MFC讨论群:22042021欢迎大家加入
- LRESULT 的意思 作用
- BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
- ◎◎◎◎◎◎◎◎ 难道CSDN上没有人用过CTrackerRect类吗,有个问题请教! ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
- 哪位高手能帮我解决这个问题?
- 帮我把这段vb代码换成c++的!
- 每个像素用48位表示,怎样取出每个通道的值?
- 关于弹出式窗口拖动问题
后面这段内容需在do while循环的select之后才对
建议你这样写:
tv.tv_sec=0;
tv.tv_usec=0; switch (nSelRet = select(0,&fdread,NULL,NULL,&tv)) == SOCKET_ERROR ))
{
case 0: case -1:
{
break;
}
default:
{
nRet = recv(CONNSOCKET, (char*)cHttpAccept, sizeof(cHttpAccept),0);
}
while(nSelRet == 0); 就是time limit expired
代码看不出问题,需要代码完全一点.
看看你的socket绑定的情况,有可能问题不是出在select函数这里。
尽量提供比较多的代码,好分析。