• socket编程部分API


      以TCP协议为例,UNIX的相关API

      

    int socket(int domain , int type , int protocol);
    

      根据指定的地址族,数据类型,协议来分配一个socket的描述字以及所占用的资源。

      domain:协议族,常见的有AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE,其中AF_INET代表ipv4地址

      type:socket类型,常见的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等

      protocol:协议。常见的协议有IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等

      返回值:返回一个套接口描述符0 or 1 or 2,如果出错,则返回-1。 

    int bind(int sockfd , const struct sockaddr * addr , socklen_t addrlen);
    

      把一个地址族中的特定地址赋给socket

      sockfd:socket描述字,即是sock引用

      addr:要绑定给sockfd的协议地址

      addrlen:协议地址的长度

      通常服务器在启动时要绑定一个众所周知的IP地址和端口,用于提供服务,客户通过它就可以连接到服务器。但是客户端与之不同,客户端是在connect():时自动分配一个端口。这就是为什么客户没有调用bind();的操作而服务器在listen();前需要bind();的操作。

      

    int listen(int sockfd , int backlog);
    

      监听socket

      sockfd:要监听的socket描述字

      backlog:相应socket可以排队的最大连接个数

    int connect(int sockfd , const struct sockaddr *addr , socklen_t addrlen);
    

      连接某个socket

      sockfd:某个客户端的描述字

      addr:服务器的socket地址

      addrlen:socket地址的长度

    int accept(int sockfd , const struct sockaddr *addr , socklen_t *addrlen);
    

      TCP服务器监听到用户请求后,调用accept();接收请求

      sockfd:服务器的socket描述字

      addr:服务器的socket地址

      addrlen:服务器socket地址的长度

      · 返回值类型:返回的是一个不同的socket,这个socket保存的是你客户端的socket信息

    ssize_t read(int sockfd , void *buf , size_t count);
    

      读取socket内容

      sockfd:socket描述字

      buf:缓冲区

      count:缓冲区的长度

    ssize_t write(int sockfd , void *buf , count);
    

      写入socket内容

      sockfd:socket描述字

      buf:缓冲区

      count:缓冲区长度

    int close(int sockfd);
    

      标记socket为关闭,使相应socket描述字的引用计数为-1,当引用计数为0时,触发TCP客户端向服务器发送终止连接请求

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    centos shell运行报语法错误: 未预期的文件结尾
    腾讯云防暴力破解防异地登陆
    centos常用命令
    centos7安装nginx
    JavaScript数组倒序函数reverse()
    Ecshop首页购物车数量调取问题
    (原)IPhone开发时把ToolBar中的元素居中的技巧
    iphone开发常用代码笔记
    Windows环境下使用Apache+mod
    [转]C++中sizeof(struct)怎么计算?
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7525599.html
Copyright © 2020-2023  润新知