摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。

accept函数等待并接受客户请求:

#include<sys/socket.h>int accept(int sockfd, struct sockaddr* addr, socklen_t* len)
复制代码

返回:非负描述字——成功, -1——失败

accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接字,这个套接字是连接套接字。此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字,它代表着一个网络已经存在的点点连接。自然要问的是:为什么要有两种套接字?原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。

参数sockfd
参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节,它只知道一个地址和一个端口号。
参数addr
这是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,当然这个地址是通过某个地址结构来描述的,用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。
参数len
如同大家所认为的,它也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。同样的,它也可以被设置为NULL。

如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接字来完成与客户的通信。

socket-accept相关推荐

  1. confluence中org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed的解决方法

    confluence中org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed的解决方法 参考文章: (1)co ...

  2. Socket accept failed

    启动tomcat显示如下错误: java.net.SocketException: select failed at java.net.PlainSocketImpl.socketAccept(Nat ...

  3. eclipse启动Tomcat问题:严重: Socket accept failed

    版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/xiaoliangyuu/p/5595991.html 原文地址: eclip ...

  4. Eclipse启动tomcat出现“严重: Socket accept failed”问题解决办法

    在eclipse中安装了Tomcat插件,启动Tomcat时出现以下问题: 严重: Socket accept failed java.net.SocketException: select fail ...

  5. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  6. python socket server accpet 时间_Python socket.accept非阻塞?

    你可能想要像select.select()(见 documentation).您提供select()和三个套接字列表:要监视的可用性,可写性和错误状态的套接字.当新客户端等待时,服务器套接字将可读. ...

  7. python3socket非阻塞_Python的socket.accept非阻塞吗?

    你可能想要类似的东西select.select().你提供select()了三个套接字列表:要监视的可读性,可写性和错误状态的套接字.当新客户端在等待时,服务器套接字将可读. 该select()功能将 ...

  8. Linux socket accept尽信书不如无书

    关于Linux socket 里面的   int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)函数,很多书籍都把第三个参数 ...

  9. 网络编程socket accept函数的理解

    在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求.这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回 ...

  10. Python中网络编程对 socket accept 函数的理解

    在服务器端,socket()返回的套接字用于监听(listen)和接受(accept),这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回一个新的套接字, ...

最新文章

  1. java 程序启动界面_程序启动界面java代码
  2. 7. Vulnerability exploitation tools (漏洞利用工具 11个)
  3. 谁才是最受欢迎的视频会议软件?就一分钟,求投票
  4. Android热补丁之Robust(三)坑和解
  5. Python常用的几种去重方式
  6. mysql边备份边导入么_MySQL 怎么导入导出操作
  7. 【Python学习】 - sklearn学习 - 交叉验证中的常用函数
  8. 从优青到杰青:优秀青年科技人才成长典型特征
  9. C++工作笔记-getter/setter方法中大佬的风格
  10. STL标准模版库----queue/deque操作大全
  11. 封装一个Automapper单例
  12. windows mysql memcached,Windows上的Memcached(不是memcache)PHP扩展
  13. [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
  14. 青囊如可授 从此访鸿蒙的意思,《坛滴槐花露,香飘柏子风。》
  15. 面试官让你说说你的缺点,你该怎么回答
  16. arXiv每日推荐-5.5:计算机视觉/图像处理每日论文速递
  17. 51单片机 11.0592MHz 产生115200 波特率
  18. 【天光学术】药学论文:医院药学部门管理现状与对策(节选)
  19. c++算法——枚举法
  20. python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)

热门文章

  1. 数据中设计中的范式与反范式
  2. jQuery+PHP实现浏览更多内容
  3. oracle重新启动步骤
  4. 浅谈java中的四个核心概念【转】
  5. linux下163YUM源配置
  6. 一些知识点的初步理解_4(协方差矩阵,ing...)
  7. 李开复写给中国学生的七封信之给中国学生的第五封信——你有选择的权利(完)...
  8. 【分享】工作流支持邮件提醒相关配置
  9. 工作流引擎JFlow与activiti 对比分析(一)5种基本控制流模式的对比
  10. VS出现异常?!和十进制转二进制比是小事