..........前面的过程略 WSABUF DataBuf;
WSAEVENT hEvents[2];
WSAOVERLAPPED RecvOverLapp;
DWORD flag;
hEvents[0]=hExitEvent;
hEvents[1]=hRecvEvent;
DataBuf.buf=data;
DataBuf.len=len;
memset(&RecvOverLapp,0,sizeof(WSAOVERLAPPED));
RecvOverLapp.hEvent=hRecvEvent;
flag=0;
/////////////////////////////////////
int ret;
if((ret=WSARecv(socket,&DataBuf,1,retlen,&flag,&RecvOverLapp,NULL))==0)
return true;
else if((ret==SOCKET_ERROR)&&(WSAGetLastError()==WSA_IO_PENDING))
{
DWORD EventCaused=WSAWaitForMultipleEvents(2,hEvents,FALSE,time,FALSE);
...后面的过程略
}上面是接收函数的大体的实现,我想问WSAWaitForMultipleEvents这个函数什么时候超时?我知道如果在time这断时间内,WSARecv()没有收到数据肯定会返回。但现在我要问的问题是WSARecv()这个函数中DataBuf成员里指定了缓冲区的长度。如果接收的时候实际接受的数据的长度小于指定的len,那么WSAWaitForMultipleEvents()会返回吗?还是直到收到len的长度才返回呢?谢谢
WSAEVENT hEvents[2];
WSAOVERLAPPED RecvOverLapp;
DWORD flag;
hEvents[0]=hExitEvent;
hEvents[1]=hRecvEvent;
DataBuf.buf=data;
DataBuf.len=len;
memset(&RecvOverLapp,0,sizeof(WSAOVERLAPPED));
RecvOverLapp.hEvent=hRecvEvent;
flag=0;
/////////////////////////////////////
int ret;
if((ret=WSARecv(socket,&DataBuf,1,retlen,&flag,&RecvOverLapp,NULL))==0)
return true;
else if((ret==SOCKET_ERROR)&&(WSAGetLastError()==WSA_IO_PENDING))
{
DWORD EventCaused=WSAWaitForMultipleEvents(2,hEvents,FALSE,time,FALSE);
...后面的过程略
}上面是接收函数的大体的实现,我想问WSAWaitForMultipleEvents这个函数什么时候超时?我知道如果在time这断时间内,WSARecv()没有收到数据肯定会返回。但现在我要问的问题是WSARecv()这个函数中DataBuf成员里指定了缓冲区的长度。如果接收的时候实际接受的数据的长度小于指定的len,那么WSAWaitForMultipleEvents()会返回吗?还是直到收到len的长度才返回呢?谢谢
解决方案 »
- 用EditBox显示大量的数据,如何始终显示最近更新出来的数据
- vc对ODBC的Access数据库的操作
- 对话框背景图片挡住了控件
- 急急急!!!获取超过4G的文件长度???
- 如何改变listbox中的文字颜色,动态追加行先送200分不够再加
- 继承时的初始化问题
- 急!!HRESULT testarray([in,out]long *lArraySize,[in,out,size_is(* lArraySize)]char *lArray)com数组问题
- 哪位老大有硬盘调度的vc 算法,高分求购
- ●●●Get Digit Number In TAPI3.0●●●
- 调试时如何看CStringArray里的值
- assert 问题呀 帮帮我
- 基于对话框的MFC程序如何让菜单项相应 UPDATE_COMMAND_UI 消息??
WSAWaitForMultipleEventsIf dwTimeout is zero, the function tests the state of the specified event objects and returns immediately. If dwTimeout is WSA_INFINITE, the function's time-out interval never expires.
///////////////////////////////////////////////////////不是这样的,底层有它自己的机制,这个机制正如鼠标驱动程序如何判断是双击一样。它会设定一个时间,如果在指定的时间内没有数据到达,它会认为这次的i/o操作完成,通知上层返回
你说的也不是我问的。
你说,“不是这样的,底层有它自己的机制,这个机制正如鼠标驱动程序如何判断是双击一样。它会设定一个时间,如果在指定的时间内没有数据到达,它会认为这次的i/o操作完成,通知上层返回
”什么叫在指定的时间内没有数据到达????我现在问的是,如果在指定的时间内有数据到达,但是这个数据的长度不是len(DataBuf.len),即,如果到达的数据不是指定的长度。
这种情况下会返回吗?
The WSAWaitForMultipleEvents function returns either when one or all of the specified event objects are in the signaled state, or when the time-out interval expires.DWORD WSAWaitForMultipleEvents(
DWORD cEvents,
const WSAEVENT* lphEvents,
BOOL fWaitAll,
DWORD dwTimeout,
BOOL fAlertable
);