unix网络编程之listen()详解

转自于:http://blog.csdn.net/ordeder/article/details/21551567

Unix网络编程描述如下:

  #include <sys/socket.h>

  int listen(int sockfd,  int backlog);

    返回:若成功则为0,  若出错则为-1;

  本函数通常应该在调用socket和bind这两个函数之后,并在调用accept函数之前调用;

为了理解其中的backlog参数,我们必须认识到内核为任何一个给定的监听套接字维护两个队列:

  (1)未完成连接队列(incomplete connection queue),每个这样的SYN分节对应其中一项:已由某个客户发出并到达服务器,而服务器正在等待完成相应的TCP三次握手过程,这些套接字处于SYN_RCVD状态;

  (2)已完成连接队列(completed connection queue),每个已完成TCP三次握手过程的客户端对应其中一项。这些套接字处于ESTABLISHED状态;

      

总结:

  1、accept()函数不参与三次握手,而只负责从建立连接队列中取出一个连接和socketfd进行绑定;

  2、backlog参数决定了未完成队列和已完成队列中连接数目之和的最大值(从内核的角度,是否这个和就是等于sock->recv_queue ?);

  3、accept()函数调用,会从已连接队列中取出一个“连接”(可以说描述的数据结构listensocket->sock->recv_queue[sk_buff] ? ),未完成队列和已完成队列中连接数    目之和将减少1;即accept将监听套接字对应的sock的接收队列中的已建立连接的sk_buff取下(从该sk_buff中可以获得对端主机的发送过来的tcp/ip数据包)
  4、 监听套接字的已完成队列中的元素个数大于0,那么该套接字是可读的。
  5、 当程序调用accept的时候(设置阻塞参数),那么判定该套接字是否可读,不可读则进入睡眠,直至已完成队列中的元素个数大于0(监听套接字可读)而唤起监听进程)

 

时间: 2024-11-10 05:28:30

unix网络编程之listen()详解的相关文章

高并发网络编程之epoll详解

select.poll和epoll的区别 在linux没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序.在大数据.高并发.集群等一些名词唱的火热之年代,select和poll的用武之地越来越有限了,风头已经被epoll占尽. select()和poll() IO多路复用模型 select的缺点: 单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述

c语言 socket编程-C语言网络编程之listen函数的实现

问题描述 C语言网络编程之listen函数的实现 请教: listen函数方法实现,函数体是什么 我抄了一段代码为什么执行到listen函数这儿就不往下执行了也不报错

linux 网络编程之TIME_WAIT状态

                                                         Linux 网络编程之TIME_WAIT状态                                                               刚刚开始看TCP socket的4次握手终止流程图的时候,对于最后的TIME_WAIT状态不是很理解.现在在回过头来研究,发现TIME_WAIT状态是一个很微妙状态.之所以设计TIME_WAIT状态的原因有2个原因:

PHP+Ajax 检测网络是否正常实例详解_php技巧

本文实例讲述了PHP+Ajax实时自动检测是否联网的方法.分享给大家供大家参考.具体实现方法如下: html部分代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

【H.264/AVC视频编解码技术详解】三. H.264简介

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 本节视频免费 一. H.264视频编码标准 H.264视频编码标准是ITU-T与

【H.264/AVC视频编解码技术详解】十一、H.264的Slice Header解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中的条带(Slice) 1. Slic

【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 本节视频免费 1. 熵编码概念 "熵&

【H.264/AVC视频编解码技术详解】十二、解析H.264码流的宏块结构(上)

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中Slice Body--宏块结构(M

【H.264/AVC视频编解码技术详解】十六:帧内预测编码的基本原理

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 在前面的博文中所述,视频信息中通常包含的冗余有三