解决方案 »
- list control如何获取任意选区?
- ShellExecuteEx启动外部exe被360拦截问题
- 屏蔽大小写键提示消息
- 如何运行一个应用程序,并且操作它主界面上的Tree列表?
- isapi filter中如何限制同一IP连接数和下载速度
- 我只有65分了,全给他:任意一个界面(有按钮,radio按钮等等控键),怎么把它打印出来?
- 问个线程间调用同一组件的问题
- 怎么添加 Wnd 类型的 控件变量 用于控制控件的可用性
- 如何创建24位真彩色位图
- 菜鸟问:我对操作系统底层的一些机制很感兴趣,谁能教教我?给分!!
- VC初学者该如何学习VC呢,求各位给些意见
- 对WideCharToMultiByte返回值的迷惑
::setsockopt(m_socket,SOL_SOCKET,SO_REUSEADDR,(char *)&nReUse,sizeof(int));
fd_set fdSocket;
FD_ZERO(&fdSocket);
FD_SET(sListen, &fdSocket);
while(TRUE)
{
fd_set fdRead = fdSocket;
int nRet = select(0, &fdRead, NULL, NULL, &tv);
if(nRet)
{
for(int i=0; i<(int)fdSocket.fd_count; i++)
{
if(FD_ISSET(fdSocket.fd_array[i], &fdRead))
{
if(sListen == fdSocket.fd_array[i])
{
...
}
else
{
char szText[256] = {0};
int nRecv = recv(fdSocket.fd_array[i], szText, 256, 0);
if(nRecv)
{
// recv data
}
else
{
closesocket(fdSocket.fd_array[i]);
FD_CLR(fdSocket_fd_array[i], &fdSocked);
}
}
}
}
}
}
用ioctlsocket是为了一次性把所有数据读完,请问用了会出问题吗?
一般不会有问题,WSAxxx系列使用Event和重叠IO异步机制,不需要每次判断缓冲区数据大小,对于连续的通信过程来说,也是不准确的,比如刚调用完ioctlsocket,底层buffer又收到了一批数据这种情况。