socket-accept
摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。
accept函数等待并接受客户请求:
#include<sys/socket.h>int accept(int sockfd, struct sockaddr* addr, socklen_t* len)
accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接字,这个套接字是连接套接字。此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字,它代表着一个网络已经存在的点点连接。自然要问的是:为什么要有两种套接字?原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。
- 参数sockfd
- 参数sockfd就是上面解释中的监听套接字,这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节,它只知道一个地址和一个端口号。
- 参数addr
- 这是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,当然这个地址是通过某个地址结构来描述的,用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。
- 参数len
- 如同大家所认为的,它也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。同样的,它也可以被设置为NULL。
如果accept成功返回,则服务器与客户已经正确建立连接了,此时服务器通过accept返回的套接字来完成与客户的通信。
socket-accept相关推荐
- 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 ...
- Socket accept failed
启动tomcat显示如下错误: java.net.SocketException: select failed at java.net.PlainSocketImpl.socketAccept(Nat ...
- eclipse启动Tomcat问题:严重: Socket accept failed
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/xiaoliangyuu/p/5595991.html 原文地址: eclip ...
- Eclipse启动tomcat出现“严重: Socket accept failed”问题解决办法
在eclipse中安装了Tomcat插件,启动Tomcat时出现以下问题: 严重: Socket accept failed java.net.SocketException: select fail ...
- C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)
文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...
- python socket server accpet 时间_Python socket.accept非阻塞?
你可能想要像select.select()(见 documentation).您提供select()和三个套接字列表:要监视的可用性,可写性和错误状态的套接字.当新客户端等待时,服务器套接字将可读. ...
- python3socket非阻塞_Python的socket.accept非阻塞吗?
你可能想要类似的东西select.select().你提供select()了三个套接字列表:要监视的可读性,可写性和错误状态的套接字.当新客户端在等待时,服务器套接字将可读. 该select()功能将 ...
- Linux socket accept尽信书不如无书
关于Linux socket 里面的 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)函数,很多书籍都把第三个参数 ...
- 网络编程socket accept函数的理解
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求.这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回 ...
- Python中网络编程对 socket accept 函数的理解
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept),这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回一个新的套接字, ...
最新文章
- java 程序启动界面_程序启动界面java代码
- 7. Vulnerability exploitation tools (漏洞利用工具 11个)
- 谁才是最受欢迎的视频会议软件?就一分钟,求投票
- Android热补丁之Robust(三)坑和解
- Python常用的几种去重方式
- mysql边备份边导入么_MySQL 怎么导入导出操作
- 【Python学习】 - sklearn学习 - 交叉验证中的常用函数
- 从优青到杰青:优秀青年科技人才成长典型特征
- C++工作笔记-getter/setter方法中大佬的风格
- STL标准模版库----queue/deque操作大全
- 封装一个Automapper单例
- windows mysql memcached,Windows上的Memcached(不是memcache)PHP扩展
- [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
- 青囊如可授 从此访鸿蒙的意思,《坛滴槐花露,香飘柏子风。》
- 面试官让你说说你的缺点,你该怎么回答
- arXiv每日推荐-5.5:计算机视觉/图像处理每日论文速递
- 51单片机 11.0592MHz 产生115200 波特率
- 【天光学术】药学论文:医院药学部门管理现状与对策(节选)
- c++算法——枚举法
- python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)