当前位置: 首页 > ai >正文

LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, 网络socket

LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, 网络 socket

  • 跨平台
  • 命名空间 zcc

方法

网络地址, 例子

192.168.1.1:25
/somepath/someppp/123_domain_socket_path
0:25;127.0.0.1:46;./somepath/123;/home/xxx/111;0:8899

常量

socket 类型

static const char var_tcp_listen_type_inet = 'i';
static const char var_tcp_listen_type_unix = 'u';
static const char var_tcp_listen_type_fifo = 'f';

监听相关

int unix_listen(char *addr, int backlog = 128); // Unix域socket监听
int inet_listen(const char *sip, int port, int backlog = 128); // IP socket监听
int fifo_listen(const char *path); // FIFO监听
int netpath_listen(const char *netpath, int backlog = 128, int *type = nullptr); // 通用路径监听

连接相关

int unix_connect(const char *addr, int timeout); // Unix域socket连接
int inet_connect(const char *dip, int port, int timeout); // IP socket连接
int host_connect(const char *host, int port, int timeout); // 主机名连接
int netpath_connect(const char *netpath, int timeout); // 通用路径连接

接收连接

int unix_accept(int fd); // Unix域socket接收连接
int inet_accept(int fd); // IP socket接收连接
int socket_accept(int fd, int type); // 通用接收连接

关闭连接

// 关闭 fd, 兼容 windows closesocket
int close_socket(int fd);

地址信息

int get_peername(int sockfd, int *host, int *port); // 获取对端地址和端口

带超时连接(connect)的实现原理

  • 假设 socket_fd 为connect用的 socket
  • 设置 socket_fd 非阻塞, 继续
  • 执行 connnect
    • 返回 -1 且 errno != EINPROGRESS: 失败, 流程终止
    • 否则: 继续
  • 超时等待 socket_fd 读写状态
    • 可读不可写: 失败, 流程终止
    • 可写不可读: 成功, 流程终止
    • 可读又可写: 再次执行 connect:
      • 返回 -1 且 errno==EISCONN: 成功, 流程终止
      • 否则: 失败, 流程终止
http://www.xdnf.cn/news/160.html

相关文章:

  • Linux和Ubuntu的驱动适配情况
  • 数据结构-Map和Set
  • Oracle日志系统之附加日志
  • 学习海康VisionMaster之中线查找
  • 新手蓝桥杯冲击国一练习题单(四)
  • C++ 二叉搜索树
  • LINUX418 加载YUM源 wireshark ping程序 解析
  • 亚远景-ASPICE评估标准与车企供应商准入要求的关联性
  • 串口通信实战:从寄存器操作到数据处理的完全指南
  • 人像面部关键点检测
  • 力扣刷题Day 20:柱状图中最大的矩形(84)
  • FPGA HR Bank如何支持ODELAY问题分析
  • Yocto项目实战教程 · 第4章:4.3小节-层
  • 七、LangChain Tool类参数对接机制解析:基于Pydantic的类型安全与流程实现
  • JavaScript 核心特性完全指南
  • Python如何助力区块链网络安全?从攻击防范到智能合约审计
  • Jenkins 多分支管道
  • uniapp打包报错,
  • LeetCode -- Flora -- edit 2025-04-17
  • 间接飞行时间 (iToF) 原理介绍
  • 守护进程编程
  • idea 许可证过期
  • docker中freshrss不自动更新问题解决方案
  • 【ROS】TEB 规划器
  • Vue3 + TypeScript中provide和inject的用法示例
  • 【映客直播-注册/登录安全分析报告】
  • Kafka系列之:计算kafka集群topic占的存储大小
  • FairMOT与MCFairMOT算法对比
  • 智能翻译播放器,让无字幕视频不再难懂
  • 基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真