基于Select模型的Socket服务器

本文介绍了基于Select模型的Socket服务器的实现。通过讲解select函数及其参数,展示了如何初始化和监听套接字,以及如何管理多个客户端连接。示例代码中详细阐述了如何处理新连接、读取和响应客户端消息,并在遇到错误时关闭套接字。
摘要由CSDN通过智能技术生成

  Select模型是WinSocket中最常见的I/O模型。select模型的核心便是select函数,select函数可对多个socket组成的集合的所有操作进行管理。Select函数所原型如下:

  int select(int nfds,fd_set FAR *readfds,fd_set FAR * writefds,

                     fd_set FAR *exceptfds,const struct timeval FAR * timeout);

 

  其中最关键的便是三个fd_set参数,readfds用于检查socket的可读性,包含如下条件的socket集合:

   1)有数据可以读入

   2)连接已经关闭、重设或中止

   3)有新的连接请求到来,可以调用accept函数

   writefds用于检查socket的可写性,包含以下条件的socket集合:

   1)如果socket跟远程目标刚连接上后(connect()或connectEx())

   2)上次发送数据时缓冲区已满,当缓冲区有空闲时,socket会包含到可写集

     exceptfds包含错误异常的socket集。

     一般情况下,我们只用读集readfds。

  使用select模型还会用到以下几个函数:

   FD_CLR(s,*set):从set中删除套接字s

         FD_ISSET(s,*set):检查s是否set集合的一名成员,

         FD_SET(s,*set):将套接字s加入到set集

         FD_ZERO(*set):清空set集合。

  

  下面是一个基于select模型的服务器例子,可管理多个客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值