首页 > 代码库 > st_vio——进程间通信接口抽象结构体
st_vio——进程间通信接口抽象结构体
工作忙,学习忙,但还是得随便写点。
st_vio,顾名思义,应该是指virtual IO,即虚拟IO。根据代码里的注释,这个是一个高度抽象的进程间通信接口结构体,mysql中,如果不是用C++类来抽象,那么就是用含函数指针的结构体来抽象,这也是C语言最常用的习惯。
struct st_vio { my_socket sd; /* my_socket - real or imaginary套接字 */ HANDLE hPipe/* 看风格应该只用于Windows系统 */; my_bool localhost; /* Are we from localhost? 这个网络接口是本地连接吗?? */ int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) 缓存fcntl的flag */ struct sockaddr_storage local; /* Local internet address 连接本端地址 */ struct sockaddr_storage remote; /* Remote internet address 连接远端地址 */ int addrLen; /* Length of remote address 远端长度 */ enum enum_vio_type type; /* Type of connection 连接类型,包括连接是否关闭,tcpip连接,socket,管道,ssl连接,共享内存,从类型上看,应该是用来标志连接的通信方式的*/ char desc[30]; /* String description 描述 */ char *read_buffer; /* buffer for vio_read_buff 读缓存 */ char *read_pos; /* start of unfetched data in the read buffer 开始读数据的偏移 */ char *read_end; /* end of unfetched data 读结束位置 */ /* function pointers. They are similar for socket/SSL/whatever 以下就是这个结构体的对应“成员函数” */ void (*viodelete)(Vio*); /* free vio结构体内存 */ int (*vioerrno)(Vio*); /* 获得对应错误码 */ size_t (*read)(Vio*, uchar *, size_t); /* 读 */ size_t (*write)(Vio*, const uchar *, size_t); /* 写 */ int (*vioblocking)(Vio*, my_bool, my_bool *); /* 阻塞?还不知何用 */ my_bool (*is_blocking)(Vio*); /* 是否已经阻塞 */ int (*viokeepalive)(Vio*, my_bool);/* 保持alive,心跳用的吗? */ int (*fastsend)(Vio*);/* 快速发送 */ /* 以下基本可以望文生义 */ my_bool (*peer_addr)(Vio*, char *, uint16*, size_t); void (*in_addr)(Vio*, struct sockaddr_storage*); my_bool (*should_retry)(Vio*); my_bool (*was_interrupted)(Vio*); int (*vioclose)(Vio*); void (*timeout)(Vio*, unsigned int which, unsigned int timeout); my_bool (*poll_read)(Vio *vio, uint timeout); my_bool (*is_connected)(Vio*); my_bool (*has_data) (Vio*); #ifdef HAVE_OPENSSL void *ssl_arg; /* ssl 参数*/ #endif };
st_vio——进程间通信接口抽象结构体
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。