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接收到一个根本不存在的连接上的分节;

  • 相关阅读:
    Dynamics 365 多租户?多实例?
    接口接收gzip压缩数据并解压
    系统检测到在一个调用中尝试使用指针参数时的无效指针地址 问题
    PBI DAX 中GroupBy
    将sql 查询结果导出到excel
    自动生成数据库表分区脚本
    快速生成导入亿级测试数据到sqlserver
    powershell 版本问题
    运行powershell 脚本 在此系统上禁止运行脚本
    python网站收集
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/5346903.html
Copyright © 2011-2022 走看看