UNIX网络编程-listen函数及其包裹函数介绍

函数简介

#include<sys/socket.h>int listen(int sockfd,int backlog);返回:若成功则为0,若出错则为-1

目前listen函数仅为TCP服务器调用,主要完成两个任务:
1. 将socket函数创建的还未建立连接的主动套接字转换为被动(监听)套接字,使内核接受指向该套接字的连接。
2. 使用第二个参数规定了内核为相应套接字排队的最大连接个数。

tips:socket函数创建的套接字被默认为一个主动套接字,即该套接字为将调用connect函数发起连接的客户套接字。而listen函数导致该套接字从CLOSED状态转换为LISTEN状态。

包裹函数(下载)

历史上总是将backlog设为5,但已无法满足现在服务器的需求了,所以需要指定一个较大的backlog才能满足繁忙的需求。一种方法是使用一个常值,可是每次增长都需要重新编译,比较麻烦;另一种方法是设定默认值,然后允许通过命令行或环境变量覆盖默认值:

#include<stdlib.h>
#include<sys/socket.h>void Listen(int fd,int backlog)
{char *ptr;if((ptr = getenv("LISTENQ")) != NULL)backlog = atoi(ptr);if(listen(fd,backlog) == -1)perror("Listen error");
}

这样就可以通过设置环境变量LISTENQ来动态配置backlog的大小。

tips:backlog为0不代表就不会有客户连接到你的机器。如果不想让客户连接,请直接关闭该套接字。

About me


- GitHub:AnSwErYWJ
- Blog:http://www.answerywj.com
- Email:yuanweijie1993@gmail.com
- Weibo:@AnSwEr不是答案
- CSDN:AnSwEr不是答案的专栏

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

UNIX网络编程-listen函数及其包裹函数介绍相关推荐

  1. linux下网络编程设置非阻塞,UNIX网络编程 非阻塞connect的实现

    一.<UNIX网络编程>-非阻塞connect 在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未 ...

  2. 再读Socket编程——《UNIX网络编程(卷一)》学习点滴

    原先曾以Socket编程为入口开始自己的新的学习,毕竟未曾致用,时至今日已比较生疏.借着阅读<UNIX网络编程(卷一)>(简称UNPv1)的机会,正好复习一番,而且希望将新的感受记录下来. ...

  3. Unix网络编程 chart

    前言 在最初接触网络这一领域的时候,就是傻傻地抱着一本TCP/IP协议详解来学习,主要学习协议的原理并研究协议相关的算法,大家都知道协议纯理论的学习是比较枯燥和复杂的,看着看着就睡着了.由于项目需要, ...

  4. UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...

    UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...

  5. linux unix编程思想,Unix网络编程思想

    本次博客主要总结参考<Unix网络编程>卷一前四章的知识,对TCP一对一通信进行重新改造和分析,经典就是经典,无可替代! 一.为什么使用包裹函数 任何现实世界的程序都必须检查每个函数调用是 ...

  6. 网编编程必看书籍:unix网络编程

    unix网络编程被誉为圣经,该书主要讲socket套接字相关,socket API,从底层剖析网络编程.网络编程中需要用到的一些经典函数,多路复用函数,这些都值得去反复学习研究. 目录: 录 Part ...

  7. UNIX网络编程学习笔记(代码超详细解析)(持续更新)

    1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...

  8. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  9. Unix网络编程---第三次作业

    Unix网络编程---第三次作业 要求: 利用多线程技术实现如下并发网络程序,要求对上课时的实现进行完善,利用线程专用数据TSD实现. 服务端: 服务器等待客户连接,连接成功后显示客户地址,接着接收该 ...

最新文章

  1. ubuntu下nginx+php5的部署
  2. html 中设置样式方式,在html元素中设置css样式的方式是什么
  3. 实时获取vuex更新的新数据_三网运营商大数据实时截流,网站手机号获取
  4. EOS大神,C++写的高发并行区块链
  5. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖
  6. 安装kinetic之后无法import cv2解决方案
  7. 考虑用静态工厂方法替代构造器
  8. python爬取网页防止重复内容_python解决网站的反爬虫策略总结
  9. 三星Galaxy S21 FE即将量产:8月登场 小屏满血旗舰!
  10. vmware-tools安装失败
  11. Linux网卡配置出错无法联网-联网报错解决方法
  12. laravel使用artisan报错SQLSTATE[42S02]: Base table or view not found: 1146
  13. 英特尔技术领导委员会(GTC) 专题系列之主席致辞
  14. TCP通讯知识点总结
  15. win7升级RDP至8.1
  16. 谷歌GDELT数据说明
  17. 移动魔百盒CM201-2,YS代工-免拆机-直刷固件及教程
  18. 小米mix2android o升级,小米MIX2升级Android 8.0 全面屏手势操作将一同推送
  19. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  20. Galaxy数据统计平台(二)

热门文章

  1. 网络安全——网络层IPSec安全协议(4)
  2. Kitty Spangles Solitaire for Mac(趣味纸牌游戏)
  3. 2013年微软Imagine Cup大赛最佳主席组织奖
  4. VB中得到当前目录API定义
  5. 走马观花看西门子公司自动控制软件
  6. 谷歌插件开发ajax请求,Chrome扩展开发,跨域请求API
  7. 计算机本科毕业论文仓库管理,仓库管理系统的设计与实现计算机本科生毕业论文.doc...
  8. 关于小米路由器升级系统保留SSH的简单方法(RedmiAX5实验)
  9. tplink错误代码51215_tplink路由器升级失败显示代码18005怎么办
  10. HTML5应用性能调优工具WAPA – 介绍篇