• 基本的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()将套接口设置为已关闭标记,并立即返回到进程。
     
    描述字访问计数,用于设置父进程的访问状况。
     
  • 相关阅读:
    文字溢出隐藏并以...展示
    定时器
    angular新建组件的组成部分
    angular五个常用语法
    element-ui 分页设置之低于10条显示完整分页页码
    new关键字执行过程
    js运用sort对json 数组进行排序
    正则验证积累
    jq监听
    gitHub命令大全
  • 原文地址:https://www.cnblogs.com/xing901022/p/3523910.html
Copyright © 2020-2023  润新知