• 常用网络编程函数


    1. 主机与网络字节序转换函数

    头文件:<netinet/in.h>

        1.1 主机转网络

    htons(uint16_t) // 16位
    htonl(uint32_t)	// 32位
    
    • 1
    • 2

        1.2 网络转主机

    ntohs(uint16_t) // 16位
    ntohl(uint32_t) // 32位
    
    • 1
    • 2

    2. 地址转换函数

    头文件:<arpa/inet.h>

        2.1 字符串转数值

    inet_aton(const char*, struct in_addr*) // 字符串有效返回1,否则0
    (已废弃)inet_addr(const char*) // 成功返回转换的数值,失败返回INADDR_NONE
    
    // 可用于IPv6的新函数
    inet_pton(int, const char*, void*) //(地址族参数, 要转换的字符串, 接收转换的数值)
    
    • 1
    • 2
    • 3
    • 4
    • 5

        2.2 数值转字符串

    inet_ntoa(struct in_addr) //返回IP地址字符串
    
    // 可用于IPv6的新函数
    inet_ntop(int, const void*,  char*, size_t) // (地址簇, 数值, IP字符串, sizeof(字符串)) 返回值也是指向该字符串的地址
    
    • 1
    • 2
    • 3
    • 4

    3. 多种IO函数

        1. send/recv

    头文件:<sys/socket.h>

    //  (套接字, 要传输数据的缓冲地址, 传输的字节数, 指定可选项)
    send(int, const void*, size_t, int) // 成功返回发送的字节数,失败-1
    
    //  同上
    recv(int, void*, size_t, int) // 返回值同上, 收到EOF返回0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    可选项含义
    MSG_OOB用于传输带外数据
    MSG_PEEK验证输入缓冲中是否存在接受的数据
    MSG_DONTROUTE数据传输过程中不参照路由表,在本地网络中寻找目的地
    MSG_DONTWAIT调用I/O函数时不阻塞,用于使用非阻塞I/O
    MSG_WAITALL防止函数返回,直到接收全部请求的字节数

        2. readv/writev (多个缓冲统一收发)

    头文件:<sys/uio.h>

    //    (套接字, iovec结构体, 2数组长度)   文件或标准描述符也可用
    writev(int, const struct iovec*, int) // 成功返回发送的字节数,失败-1
    
    //    同上
    readv(int, const struct iovec*, int)  // 返回值同上
    
    struct iovec
    {
    	void* iov_base;	// 缓冲地址
    	size_t iov_len;	// 缓冲大小
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4. 套接字半关闭函数

    头文件:<sys/socket.h>

    shutdown(int sock, int howto) //成功返回0,失败-1
    howto可选参数:
    ------------: SHUT_RD   // 断开输入流
    ------------: SHUT_WR   // 断开输出流
    ------------: SHUT_RDWR // 同时断开IO流
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. FILE和文件描述符的相互转换

    头文件:<stdio.h>

    //    (文件描述符, FILE模式(与fopen的打开模式相同))
    fdopen(int fildes, const char* mode)  // 转换为FILE, 成功返回FILE,失败NULL
    
    fileno(FILE*) // 成功返回转换后的文件描述符,失败-1
    
    • 1
    • 2
    • 3
    • 4

    6. 套接字可选项设置函数

    头文件:<sys/socket.h>

    //        (套接字, 协议层, 选项名, 结果缓存地址, 4参数字节大小) 获取套接字可选项
    getsockopt(int sock, int level, int opt, void*, socklen_t*) // 成功返回0,失败-1
    
    // 参数,返回值同上, 设置套接字可选项
    setsockopt(int, int, int, const void*, socklen_t)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7. IP地址与域名转换函数

    头文件:<netdb.h>

    gethostbyname(const char*) // 域名转IP 返回为hostent结构体,失败为NULL
    gethostbyaddr(const char*, socklen_t, int) (IP地址,1大小, 地址簇) 返回值同上
    
    • 1
    • 2

    可选性表可参考:可选项汇总表

  • 相关阅读:
    开关按钮Switch
    docker-compose 部署 MySQL 8
    官宣!CNCF 正式接受 Istio 成为孵化项目
    docker的小秘密--digests仓库校验码(如何修改digests)
    python实现全局变量共享,一个全局变量在多个文件中使用
    又是一年开学季,老学长告诉你弯道超车的法则
    【PyTorch深度学习项目实战100例】—— 基于GAN(生成对抗网络)生成动漫人物图像 | 第74例
    齐次坐标与投影几何
    云原生 | Kubernetes - Helm - Prometheus 实现资源限制
    一文带你搞懂ArrayList 从源码角度剖析底层原理
  • 原文地址:https://blog.csdn.net/qq_45337964/article/details/125490994