zoukankan      html  css  js  c++  java
  • listen函数小结

    listen 用来监听tcp socket的连接请求;

    函数形式为int listen(int sockfd, int backlog);

    要明白backlog参数的含义,我们必须明白对于一个listening socket,kernel维护者两个队列,

    1.一个未完成连接的队列,此队列维护着那些已收到了客户端SYN分节信息,等待完成三路握手的连接,socket的状态是SYN_RCVD;

    2.一个已完成的连接的队列,此队列包含了那些已经完成三路握手的连接,socket的状态是ESTABLISHED

    backlog参数历史上被定义为上面两个队列的大小之和,Berkely实现中的backlog值为上面两队列之和再乘以1.5,但是目前根据上图可知,backlog现在的意思是指已完成连接队列的大小。当客户端的第一个SYN到达的时候,TCP会在未完成队列中增加一个新的记录然后回复给客户端三路握手中的第二个分节(服务端的SYN和针对客户端的 ACK),这条记录会在未完成队列中一直存在,直到三路握手中的最后一个分节到达,或者直到超时(Berkeley时间将这个超时定义为75秒)。

    如果当客户端SYN到达的时候队列已满,TCP将会忽略后续到达的SYN,但是不会给客户端发送RST信息,因为此时允许客户端重传SYN分节,如果返回错误信息,那么客户端将无法分清到底是服务端对应端口上没有相应应用程序还是服务端对应端口上队列已满这两种情况。

  • 相关阅读:
    委托(2).net 1.x中的委托
    委托(1)认识委托
    克隆对象的几种方法
    常用的去重和排序
    为更好地设计数据库,重新整理sql server数据类型
    对于数据库中表示状态或类型字段表示方法的思考
    string to byte[]
    json序列化时datetime的处理方法
    dll版本冲突的解决方法
    .net中的序列化
  • 原文地址:https://www.cnblogs.com/zmingh/p/6596437.html
Copyright © 2011-2022 走看看