socket编程之listen()
3. listen()
用于监听套接字上的连接
3.1 包含头文件
#include <sys/types.h>
#include <sys/socket.h>
3.2 函数主体
int listen(int sockfd, int backlog);
参数解释:
- int sockfd
listen() 将 sockfd 引用的套接字标记为被动套接字,即用作使用 accept()接受传入连接请求的套接字。 这里的sockfd 引用SOCK_STREAM 或 SOCK_SEQPACKET 类型的套接字。 - int backlog
backlog 参数定义了 sockfd 的挂起连接队列可能增长到的最大长度。如果连接请求在队列已满时到达,则客户端可能会收到指示 ECONNREFUSED 的错误。如果基础协议支持重新传输,则可能会忽略该请求,以便以后的重新尝试连接成功。
如果 backlog 参数大于 /proc/sys/net/core/somaxconn 中的值,则它将被静默截断为该值;此文件中的默认值为 128,可以按需要自己修改。
这里针对第二个参数进行补充说明:
当一个主动套接字(即没有listen()的套接字)调用listen()变为被动套接字时,系统会为该socket维护两个队列,第一个队列是已经建立连接(即完成三次握手建立连接)的套接字,第二个队列是为建立完整连接的套接字(即正在完成三次握手),Linux 2.2以后,第二个参数表示等待接受(accept)的完全建立的(即第一个队列)套接字的队列长度,且队列长度为backlog+1。记住这里的两个队列,之后accept()、connect()函数中会详细提及。
3.3 返回值
成功返回0;错误返回-1,错误类型如下:
错误类型 | 解释 |
---|---|
EADDRINUSE | 另一个套接字已在同一端口上监听 |
EADDRINUSE | 引用的套接字还未绑定到具体的地址,或者尝试绑定到临时端口时,这些端口都已经在使用中 |
EBADF | sockfd 不是有效的文件描述符 |
ENOTSOCK | 文件描述符 sockfd 未引用套接字。 |
EOPNOTSUPP | 套接字不是支持 listen() 操作的类型。 |
3.4 结束
listen()函数较为简单,但是是流套接字服务端必要步骤。关于socket背后的TCP通信原理,之后会在其他专栏更新。
最后,还是建议所有函数都进行返回值判断,以提高代码的健壮性。
socket编程之listen()相关推荐
- 老雷socket编程之PHP利用socket扩展实现聊天服务
老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streams sockets socket_create(AF ...
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
转载:http://blog.csdn.net/apollon_krj/article/details/53437764#0-tsina-1-58570-397232819ff9a47a7b7e80a ...
- socket编程之 accept函数的理解
在进入我们的正题之前,再来复习一波编写服务器的函数流程吧 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/writ ...
- [深入浅出WP8.1(Runtime)]Socket编程之UDP协议
13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...
- Linux下socket编程之UDP简单实现
本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...
- Linux下Socket编程之TCP应用
现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...
- linux网络编程之Listen函数参数介绍
1.listen()函数介绍 listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器, ...
- 网络编程之 listen()函数的使用与三次握手的理解
listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程 服务器端:socket()-->bind( )-->listen()-->accept()-->r ...
- Linux下Socket编程之TCP Server端
一.建模 绝大部分关于socket编程的教程总是从socket的概念开始讲起的.要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中 ...
最新文章
- 右边补0 润乾报表_关于润乾报表的补充说明 -
- git status中文显示乱码
- PyCairo 中的透明度
- usb大容量存储设备驱动程序_20年历史了!为什么USB接口还存在?网友:原来如此...
- Android Fragment(二)
- [转载]如何限制一个类对象只在栈(堆)上分配空间?
- git pull远程master_github与Git实用操作图解之一
- 1386兆瓦:东能源拟建全球最大海上风电场
- APP分发渠道的竞争分析
- compute shader
- win10永久自动更新服务器,win10彻底永久关闭自动更新的方法【已验证有效】
- 成为研究生后你都明白了什么?
- Mac上面有哪些宝藏的软件
- JAVA中枚举是什么
- 智能交通工程质量的第三方监测
- UGUI动画快速制作
- 如何利用网易云直播的接口做一个直播项目
- 测试服务器运行温度,负载、功耗、温度测试结果
- 【效率】代码对比工具,我就用这6个
- EasyNVR是怎么做到Web浏览器播放RTSP摄像机直播视频延时控制在一秒内的