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

  • 相关阅读:
    SQL中top使用方法
    event.keyCode 事件属性
    A Novel Multi-label Classification Based on PCA and ML-KNN
    Android 浏览器开发WebView setBlockNetworkImage本末
    ASIHTTPRequest 对GET POST 请求简包
    九度OJ 1177 查找 (模拟)
    【Java GUI】Java GUI基金会
    iOS开展-clang: error: unknown argument: &#39;-websockets&#39;解决方案
    java学习笔记2015-6-6
    oracle 选择最频繁出现之前,5文章数据
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/5346903.html
Copyright © 2020-2023  润新知