初探select模型,一头雾水,求指点? 本帖最后由 oyljerry 于 2012-04-20 10:34:58 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.不停select进行send或recv数据2.FD_SET(s, *set):将套接字s加入集合set。3.确定套节字有多少未决I/O。因为这个集合里只有 mainsock ,所以就不用调用fd_array了4. mainsock 在前面的socket()方法里已经赋过值了,就不需要再赋值了。如果同时来了5个连接请求的话,这5个socket都能到fdset结构里去。 1:不停的select就像你到你家邮箱看看有没有你的信一样。select会告诉你有没有数据到来,有没有数据发送?2:说法1:FD_SET(s, *set):将套接字s加入集合set。其实set内部就是一个数组,lz可以打开mfc的代码看下。3:要不要for循环一样,只需要if(FD_ISSET(mainsock,&fdread))就ok了。4:你没有调用FD_SET(s, *set)就不会进去,应该是到你们通讯的线程里面了。//...为clientSocket创建一个新的线程,在新的线程中再不停的select有这个线程统一处理了。 1、所谓不停的Select是指处理了一个Select请求后马上等待处理下一个,这不正是我们所希望的么2、这个其实就是维护secket,看不懂的不用管,按说法一理解即可3、for循环的目的是冗余处理,主要目的是掉有可能占用的资源4、mainsock本来就不用重新赋值,同时处理时没有问题的 for(int i=0;i < fdread.fd_count-1;i++){ len = sizeof(sockaddr_in); clientSocket = accept(mainsock, reinterpret_cast<sockaddr*>(&serviceaddr_info),&len); if(clientSocket != INVALID_SOCKET) { //CreateThread(&scrt,0,&SelectProc, //...为clientSocket创建一个新的线程,在新的线程中再不停的select }}那在新线程的select里,FD_SET(s, *fdset)的 s 是这里的clientSocket,fdset则是一个新的吧,不是这里的fdread是不是? 关于列表框中不同路径的文件打开失败的问题 求在VC MFC中创建多个工具栏的代码 串口通讯中的十六进制处理? 在双核机器上,如何使单个进程占用的CPU利用率超过50%? 500分求XP下动态加载WDM硬件设备驱动代码 我现在用FindWindow函数无法捕捉最新版的QQ登录窗口了,怎么回事?在线等 一个超郁闷的问题!!!!!!!!!!!! 如何cp和移动一个目录下的所有文件 3000rmb的二手电脑值不值? CListCtrl类怎么响应选中的项变化的消息? send发送长度为什么0-在线等,急! 在view里面设置对话框中combox的默认值
2.FD_SET(s, *set):将套接字s加入集合set。
3.确定套节字有多少未决I/O。因为这个集合里只有 mainsock ,所以就不用调用fd_array了
4. mainsock 在前面的socket()方法里已经赋过值了,就不需要再赋值了。如果同时来了5个连接请求的话,这5个socket都能到fdset结构里去。
2:说法1:FD_SET(s, *set):将套接字s加入集合set。其实set内部就是一个数组,lz可以打开mfc的代码看下。
3:要不要for循环一样,只需要if(FD_ISSET(mainsock,&fdread))就ok了。
4:你没有调用FD_SET(s, *set)就不会进去,应该是到你们通讯的线程里面了。//...为clientSocket创建一个新的线程,在新的线程中再不停的select
有这个线程统一处理了。
2、这个其实就是维护secket,看不懂的不用管,按说法一理解即可
3、for循环的目的是冗余处理,主要目的是掉有可能占用的资源
4、mainsock本来就不用重新赋值,同时处理时没有问题的
for(int i=0;i < fdread.fd_count-1;i++)
{
len = sizeof(sockaddr_in);
clientSocket = accept(mainsock,
reinterpret_cast<sockaddr*>(&serviceaddr_info),&len);
if(clientSocket != INVALID_SOCKET)
{
//CreateThread(&scrt,0,&SelectProc,
//...为clientSocket创建一个新的线程,在新的线程中再不停的select
}
}
那在新线程的select里,FD_SET(s, *fdset)的 s 是这里的clientSocket,fdset则是一个新的吧,不是这里的fdread是不是?