- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Winsock的輸入/輸出模型這些模型包括select(選擇)、WSAAsyncSelect(非同步選擇)、WSAEventSelect(事件選擇)、OverlappedI/O(重疊式I/O)以及Completionport(完成端口)。限於篇幅,本章將主要介紹前三種。不同的Windows平臺支持不同的I/O模型。如表8.1所示:8.1select模型select(選擇)模型是Winsock中最常見的I/O模型。它的中心思想是利用select函數,實現對多個套接字I/O的管理。利用select函數,可以判斷套接字上是否存在數據,或者能否向一個套接字寫入數據。只有在條件滿足時,才對套接字進行輸入輸出操作,從而避免無功而返的I/O函數調用,避免頻繁產生WSAEWOULDBLOCK錯誤,使輸入輸出變得有序。1.select的函數select的函數原型如下,其中fd_set數據類型,代表著一系列特定套接字的集合。intselect(intnfds,fd_setFAR*readfds,fd_setFAR*writefds,fd_setFAR*exceptfds,conststructtimevalFAR*timeout);說明:select函數對readfds、writefds和exceptfds三個集合中指定的套接字進行檢查,看是否有數據可讀、可寫或有帶外數據,如果有至少一個套接字元合條件,就立即返回。符合條件的套接字仍在集合中,不符合條件的套接字則被刪去。如果一個也沒有,則等待。但最多等待timeout所指定的時間,便返回。2.操作套接字集合的宏在應用程式中,用select對套接字進行監視之前,必須先將要檢查的套接字句柄分配給某個集合,設置好相應的fd_set結構,再來調用select函數,便可知道一個套接字上是否正在發生上述的I/O活動。Winsock提供了下列宏操作,專門對fd_set數據類型進行操作(1)FD_CLR(s,*set):從set中刪除套接字s。(2)FD_ISSET(s,*set):檢查s是否set集合的一名成員;如答案是肯定的是,則返回TRUE。(3)FD_SET(s,*set):將套接字s加入集合set。(4)FD_ZERO(*set):將set初始化成空集合。其中,參數s是一個要檢查的套接字,參數set是一個fd_set集合類型的指針。例如,調用select函數前,可使用FD_SET宏,將指定的套接字加入到fd_read集合中,select函數完成後,可使用FD_ISSET宏,來檢查該套接字是否仍在fd_read集合中。3.select模型的操作步驟用select操作一個或多個套接字句柄,一般採用下述步驟:(1)使用FD_ZERO宏,初始化自己感興趣的每一個fd_set集合。(2)使用FD_SET宏,將要檢查的套接字句柄添加到自己感興趣的每個fd_set集合中,相當在指定的fd_set集合中,設置好要檢查的I/O活動。(3)調用select函數,然後等待。select完成返回後,會修改每個fd_set結構,刪除那些不存在待決I/O操作的套接字句柄,在各個fd_set集合中返回符合條件的套接字。(4)根據select的返回值,使用FD_ISSET宏,對每個fd_set集合進行檢查,判斷一個特定的套接字是否仍在集合中,便可判斷出哪些套接字存在著尚未完成(待決)的I/O操作。(5)知道了每個集合中“待決”的I/O操作之後,對相應的套接字的I/O進行處理,然後返回步驟1,繼續進行select處理。4.舉例下麵的例子用select管理一個套接字上的I/O操作。SOCKETs;//定義一個套接字fd_setfdread;//定義一個套接字集合變數intret;//返回值//創建一個套接字,並接受連接.......//管理該套接字上的輸入/輸出while(TRUE){//在調用select()之前,總是要清除套接字集合變數FD_ZERO(fdread);//將套接字s添加到fdread集合中FD_SET(s,fdread);//調用select()函數,並等待它的完成,這裏只是想檢查s是否有數據可讀if((ret=select(0,fdread,NULL,NULL,NULL))==SOCKET_ERROR){//處理錯誤的代碼}//返回值大於零,說明有符合條件的套接字,對於本例這個簡單的情況,//selec
您可能关注的文档
- 安全生产基础培训新员工培训课件.pptx
- 安全生产培训课件.ppt
- 安全生产培训课件.ppt
- 安全生产月安全技能竞赛活动策划课件.ppt
- 安全生产月安全知识竞赛模板课件.ppt
- VitD缺乏性佝偻病课件.ppt
- Web服务器管理课件.ppt
- Web界面设计课件.ppt
- Web数据库安全性课件.ppt
- Web数据库的操作课件.ppt
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
文档评论(0)