zoukankan      html  css  js  c++  java
  • TCP之connect

    1. connect函数:

    #include <sys/socket.h>
    
    int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
    
    ret-成功返回0 失败返回-1

    connect函数是把当前套接字从CLOSED状态转移到SYN_SENT状态,若成功则再转移到ESTABLISHED状态。若connect失败则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数。当循环调用connect为给定主机尝试各个ip地址直到有一个成功时,在每次connect之后,都必须close当前套接字,并重新调用socket;

    2. connect不需要bind:

    在调用connect之前不必非得调用bind函数,如果需要的话,内核会确定源IP地址,并选择一个临时端口作为源端口; 

    3. TCP套接字connect错误:

    (1) 若TCP客户端没有收到syn分节的响应,则返回ETIMEOUT错误;调用connect函数时,内核发送一个syn,若无响应则等待6s后再发送一个,若仍然无响应则等待24s后在发送一个,若总共等待75s后仍未收到响应则返回本错误;

    (2) 若对客户的syn响应是rst,则表明该服务器在我们指定的端口上没有进程在等待与之连接,这是一种硬错误,客户一收到rst马上返回ECONNREFUSED错误;

    (3) 若客户发送的syn在中间的某个路由器上引发了目的不可达icmp错误,则认为是一种软错误。客户主机内核保存该消息,并按照第一种情况的时间间隔继续发送syn,咋某个规定时间后仍未收到响应,则把保存的消息作为EHOSTUNREACH或者ENETUNREACH错误返回给进程;

    4. 产生RST三个条件:

    (1) 目的地为某端口的syn到达,然而该端口上没有正在监听的服务器;

    (2) tcp想取消一个已有连接;

    (3) tcp接收到一个根本不存在的连接上的分节;

  • 相关阅读:
    Jsp入门EL表达式_学习笔记
    sql-DDL, DML 常用语句
    sql-DDL, DML 常用语句
    sql-DDL, DML 常用语句
    sql-DDL, DML 常用语句
    谁需要GUI?快看Linux 终端生存之道
    谁需要GUI?快看Linux 终端生存之道
    谁需要GUI?快看Linux 终端生存之道
    谁需要GUI?快看Linux 终端生存之道
    2.3 根据层级查找元素
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/5346903.html
Copyright © 2011-2022 走看看