socket编程——进一步理解accept函数

14 篇文章 7 订阅

    在前面的文章《TCP套接字编程--常用函数小结》中,我们分析了socket的常用函数,其他的函数,我们还比较容易理解,但是accept函数的意义容易被忽略。我们来总结下使用要点:

1)accept函数负责从客户端“连接”的队列中返回一个最近的新连接。

2)accept只负责“接客”,不干别的,不是用于接收数据的,接收数据是通过read函数实现的,accept正常返回,就代表有新客户端连接(三次握手)。

   我们结合实际工程来分析一下这个函数:我们在做服务器并发 时,往往有几种方式

 1)多进程

 2)多线程

 3)单进程结合select函数。

不管是哪种方式,有一个问题都是需要面对的,就是并发服务器既要能够识别新的客户端连接(三次握手),也能识别已经连接客户端的数据来往,这个时候,可能就容易混淆或者忘记accept的功能了,我们是需要区别对待判断的。多进程比较容易,每次都是调用accept,它会阻塞,有返回,自然就是有新客户端,我们就直接fork 子进程即可。因为子进程是个进程,很强大,是可以直接进行while死循环的,同时子进程还会继承新客户端的套接字对应描述符, 所以相当于子进程就能够独立的应对那个新连接的客户端了。而我们的主进程里再进行accept是可以的。

   而如果是单进程结合select的方式,等到select返回后, 我们就需要判断了,如果是新的连接(三次握手),我们就 使用accept,而如果是已经连接的客户端数据,那就进行read,然后根据协议进行返回。如果我们还是按照 多进程那样,都是用accept,显然,会 阻塞,就实现不了数据业务了。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值