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

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

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

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

1)多进程

2)多线程

3)单进程结合select函数。

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

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

socket编程——进一步理解accept函数相关推荐

  1. 在QT中使用socket编程:解决connect函数名称冲突

    问题 当使用QT做可视化界面的时候,我们知道connect函数是连接函数,用于连接信号与槽,但connect在C/C++的socket网络编程中也是一个必不可少的函数,作用是发送连接请求,建立tcp连 ...

  2. Socket编程 涵盖代码和函数参数介绍

    Socket是针对端系统,也就是用户主机上开发程序,不涉及网络设备(交换机.路由器) 独立于网卡驱动层之上,不涉及硬件,即基于Packet Driver编程 端:是指通信双方两台电脑 应用编程接口AP ...

  3. Socket编程模式理解与对比

    本文主要分析了几种Socket编程的模式.主要包括基本的阻塞Socket.非阻塞Socket.I/O多路复用.其中,阻塞和非阻塞是相对于套接字来说的,而其他的模式本质上来说是基于Socket的并发模式 ...

  4. socket编程之回声服务器函数的陷阱

    由connect函数使用不当导致的小错误 话不多说先看代码: server.c #include<stdio.h> #include<ctype.h> #include< ...

  5. socket编程:从send函数和sendto函数参数的不同看TCP和UDP的差别。

    ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t sendto(int sockfd, const v ...

  6. python socket编程:实现redirect函数、cookie和session

    在Flask框架中有一个redirect函数,用于实现页面的跳转,现在我们来实现它.原理就是:当浏览器接受到服务器响应的状态码是301或者302时,表示请求的页面已经永久或临时性转移到了新的位置,而这 ...

  7. jquery页面跳转带cookie_python socket编程:实现redirect函数、cookie和session

    在Flask框架中有一个redirect函数,用于实现页面的跳转,现在我们来实现它.原理就是:当浏览器接受到服务器响应的状态码是301或者302时,表示请求的页面已经永久或临时性转移到了新的位置,而这 ...

  8. C++工作笔记-对二级指针的进一步理解(函数的参数使用二级指针,从而操作原数据)

    二级指针不仅仅可以表示一个二维表(在邻接表里面用得比较多)! 当参数是一级指针的时候得到了是指向了同一个地址! 但参数是二级指针却有不同的效果! 如下代码: main.cpp #include< ...

  9. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

最新文章

  1. [kuangbin带你飞]专题六-生成最小树
  2. Shell中的数据重定向--输入/输出重定向
  3. 人工智能工程师学习路线及具备的5项基本技能
  4. wamp解决ajax跨域问题
  5. scala入门-05继承类(extends)的使用
  6. 书评:JavaFX 2.0:示例介绍
  7. 协议簇:ICMP 解析
  8. __main代码分析
  9. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十八章 UCOSII 实验 3...
  10. 关于@NotNull 和 @Nullable
  11. django数据库增删改查操作
  12. 广州市车联网先导区建设总体技术规范
  13. netty实现 http 长连接
  14. linux步进电机实验程序,基于嵌入式Linux的步进电机驱动程序设计
  15. java缓存击穿_对缓存击穿的一点思考
  16. 学习是怎样的一个过程??
  17. ch01: 初识数据库
  18. GrayWorld 色彩均衡算法
  19. 证券市场低频日度数据
  20. 丰沛数_不足数_完全数

热门文章

  1. C语言 define 定义函数(多行书写) - C语言零基础入门教程
  2. HTML特殊字符转译
  3. jq修改input、textarea只读,不可修改
  4. 【知识整理】生成Android(安卓)app证书的keystore文件
  5. SQL注入 | 宽字节注入2
  6. 第五章 Java 中的 wait、notify 和 notifyAll 方法示例
  7. supervisor看守进程
  8. QGraphicsView,QGraphicsScene和QGraphicsItem
  9. 产品新人必看:入职前的准备及快速适应产品工作
  10. iPhone苹果手机iOS16剪贴板复制粘贴确认弹窗怎么关闭清理剪切板提醒设置方法的教程?