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()相关推荐

  1. 老雷socket编程之PHP利用socket扩展实现聊天服务

    老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streams sockets socket_create(AF ...

  2. 基于Linux的Socket编程之TCP全双工Server-Client聊天程序

    转载:http://blog.csdn.net/apollon_krj/article/details/53437764#0-tsina-1-58570-397232819ff9a47a7b7e80a ...

  3. socket编程之 accept函数的理解

    在进入我们的正题之前,再来复习一波编写服务器的函数流程吧 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/writ ...

  4. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  5. Linux下socket编程之UDP简单实现

    本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...

  6. Linux下Socket编程之TCP应用

    现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...

  7. linux网络编程之Listen函数参数介绍

    1.listen()函数介绍 listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器, ...

  8. 网络编程之 listen()函数的使用与三次握手的理解

    listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程 服务器端:socket()-->bind( )-->listen()-->accept()-->r ...

  9. Linux下Socket编程之TCP Server端

    一.建模 绝大部分关于socket编程的教程总是从socket的概念开始讲起的.要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中 ...

最新文章

  1. 右边补0 润乾报表_关于润乾报表的补充说明 -
  2. git status中文显示乱码
  3. PyCairo 中的透明度
  4. usb大容量存储设备驱动程序_20年历史了!为什么USB接口还存在?网友:原来如此...
  5. Android Fragment(二)
  6. [转载]如何限制一个类对象只在栈(堆)上分配空间?
  7. git pull远程master_github与Git实用操作图解之一
  8. 1386兆瓦:东能源拟建全球最大海上风电场
  9. APP分发渠道的竞争分析
  10. compute shader
  11. win10永久自动更新服务器,win10彻底永久关闭自动更新的方法【已验证有效】
  12. 成为研究生后你都明白了什么?
  13. Mac上面有哪些宝藏的软件
  14. JAVA中枚举是什么
  15. 智能交通工程质量的第三方监测
  16. UGUI动画快速制作
  17. 如何利用网易云直播的接口做一个直播项目
  18. 测试服务器运行温度,负载、功耗、温度测试结果
  19. 【效率】代码对比工具,我就用这6个
  20. EasyNVR是怎么做到Web浏览器播放RTSP摄像机直播视频延时控制在一秒内的

热门文章

  1. java面试题网球_温网停赛,AI不停赛:斯坦福新研究模拟网球名将打比赛
  2. HDU - 5468 Puzzled Elena (容斥/莫比乌斯)
  3. vue项目中将页面生成图片或者PDF文档
  4. c语言指针题讲解,C语言指针经典练习题-及答案讲解.doc
  5. curl查看公口ip
  6. matlab atan2函数解析
  7. Ansible-python
  8. 机器学习——最小二乘法,闭式解矩阵推导
  9. 结合vue和纯css实现动态流量小球
  10. FMS安装与简单应用