zoukankan      html  css  js  c++  java
  • 网络编程:connect函数

    • TCP客户用connect函数来建立与TCP服务器的连接:

      #include<sys/socket.h>
      int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen)
      返回:若成功则为0,若出错则为-1
      
    • sockfd是由socket函数返回的套接字描述符,第二个、第三个参数分别是一个指向套接字地址结构的指针和该结构的大小。套接字地址结构必须含有服务器的IP地址和端口号。

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

    • 如果是TCP套接字,调用connect函数将激发TCP的三次握手过程,而且仅在连接建立成功或出错时才返回,其中,出错返回的可能情况有以下几种:

      • 若TCP客户没有收到SYN分节的相应,则返回ETIMEDOUT错误。举例,调用connect函数时,4.4BSD内核发送一个SYN,若无响应则等待6s后再发送一个,若仍无响应则等待24s后再发送一个。若总共等待了75s后仍未收到响应则返回本错误。
      • 若对客户的SYN的响应是RST(表示复位),则表明该服务器主机在我们指定的端口上没有进程在等待与之连接。这是一种硬错误,客户一收到RST就马上返回ECONNREFUSED错误。
      • 若客户发出的SYN在中间的某个路由器上引发了一个“destination unreachable”(目的地不可达)ICMP错误,则认为是一个软错误。客户主机内核保存该消息,并按第一种情况所述的时间间隔继续发送SYN。若在某个规定的时间内仍无响应,则把保存的信息(即ICMP错误)作为EHOSTUNREACH或ENETUNREACH错误返回给进程。以下两种情况是有可能的:一是按照本地系统的转发表,根本没有到达远程系统的路径;二是connect调用根本不等待就返回。
    • 按照TCP状态转换图,connect函数导致当前套接字从CLOSED状态转移到SYN_SENT状态,若成功再转移到ESTABLISHED状态。若connect失败,则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数。

  • 相关阅读:
    java类加载全过程
    pyAggr3g470r 3.6 发布,新闻聚合器
    fourinone分布式协调设计解析
    修改openJDK7的javac,使得java支持单引号字符串
    SabreDAV 1.8.0 发布,集成 WebDAV 系统
    openSUSE 12.3 里程碑 1 发布
    GroupOffice 4.0.123 发布
    nagios总结与基本配置模板
    Zorin OS 6.1 发布,基于Ubuntu的Linux
    Ehcache 2.6.2 发布,Java 缓存框架
  • 原文地址:https://www.cnblogs.com/lengender-12/p/6812187.html
Copyright © 2011-2022 走看看