zoukankan      html  css  js  c++  java
  • 基本的TCP编程

    int socket(int family,int type,int protocol);
    family:
    AF_INET ipv4协议
    AF_INET6 ipv6协议
    AF_LOCAL unix域协议
    AF_ROUTE 路由套接口
     
    type:
    SOCK_STREAM 字节流套接口
    SOCK_DGRAM 数据包套接口
    SOCK_RAW 原始套接口
     
    返回一个很小的非负整数,叫做套接口描述字,简称套接字sockfd
     
    AF_XXX地址族
    PF_XXX协议族
     
    connect()建立一个TCP连接
     
    三次握手出错:
    1 发送无应答,6秒后再次发送,无应答,24秒后再次发送,若75秒钟后仍未相应,则返回错误
    2 硬错:SYN返回RST:SYN到达端口,但没有监听进程、TCP想取消一个已有的连接、TCP接受了一个根本不存在的连接
    3 软错:中间路由器产生目的地不可达的ICMP错误
     
    bind() 给套接口分配一个本地协议地址
     
    struct sockaddr_in servaddr;
    servaddr.sin_addr.s_addr = htol(INADDR_ANY);
    头文件<netinet/in.h>定义的所有INADDR_常值都是主机字节序,所以应该使用htol
     
    捆绑非通配IP地址的好处是:由内核将给定的目的IP地址解复用后送往服务器进程
     
    int listen(int sockfd,int backlog);
    listen()仅被TCP服务器使用:在调用socket bind之后,accept之前
    1 将未连接的套接口转换成被动套接口,指示内核应接受只想此套接口的连接请求。
    2 函数第二个参数规定了,套接口排队的最大连接个数
     
    对于给定的监听套接口,有两个队列:
    1 未完成连接队列 incomplete connection queue  SYN_RCVD状态
    2 已完成连接队列 complete connection queue ESTABLISHED状态
     
    accept() TCP服务器调用,从已完成的队列头返回下一个已完成的连接。若完成队列为空,则睡眠
     
    int accept(int sockfd,struct sockaddr *cliaddr,socklen_t * addrlen);
    addrlen是值-结果参数
     
    fork()一次调用两个返回值:
    1 父进程调用返回的是子进程的ID
    2 子进程调用返回0
     
    close()将套接口设置为已关闭标记,并立即返回到进程。
     
    描述字访问计数,用于设置父进程的访问状况。
     
  • 相关阅读:
    redis 使用 get 命令读取 bitmap 类型的数据
    如何用vue-router为每个路由配置各自的title
    vue定义全局变量和全局方法
    后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异
    Android Studio(十二):打包多个发布渠道的apk文件
    Android中使用lambda表达式
    Android教程-03 常见布局的总结
    程序员的业余项目
    Android Studio(十一):代码混淆及打包apk
    win10提示 磁盘包含不是“PARTITION_BASIC_DATA_GUID"类型的分区
  • 原文地址:https://www.cnblogs.com/xing901022/p/3523910.html
Copyright © 2011-2022 走看看