* 版权所有 (c) 华为技术有限公司 2023-2023
* 功能说明: 基于 TCP 协议实现的通信库示例代码
* 服务端调用流程:VmiCreateConnection -> VmiListen -> VmiAccpet -> VmiSend/VmiRecv -> VmiCloseConnection
* 客户端调用流程:VmiCreateConnection -> (ConfigClientAddress -> VmiBeginConnect)/(VmiConnect) -> VmiSend/VmiRecv -> VmiCloseConnection
*/
#ifndef CONNECTION_H
#define CONNECTION_H
#include <unistd.h>
#include <cstdint>
#ifdef __cplusplus
extern "C" {
#endif
#define VMI_API __attribute__((visibility("default")))
constexpr int CONNECTION_SUCCESS = 0;
constexpr int CONNECTION_FAIL_AND_CAN_RETRY = -1;
constexpr int CONNECTION_PARAM_CHECK_FAILED = -2;
constexpr int CONNECTION_DISCONNECT = -3;
constexpr int CONNECTION_NOT_INIT_SYMBOL = -1000;
* @功能描述:创建连接对象
* @返回值:成功时返回新创建的通信连接描述符;错误时返回负数并设置errno
*/
VMI_API int VmiCreateConnection();
* @功能描述:由服务端程序调用,指定监听的端口
* @参数 [in] connection:通信连接描述符
* @参数 [in] port:需监听的端口
* @返回值:成功时返回0;错误时返回-1并设置errno
*/
VMI_API int VmiListen(int connection, unsigned int port);
* @功能描述:由服务端程序调用,调用后将阻塞线程直到新的连接出现,此函数返回新的通信连接描述符
* @参数 [in] connection:通信连接描述符
* @返回值:返回值表示与客户端建立新连接的描述符,错误时返回负数并设置errno
*/
VMI_API int VmiAccept(int connection);
* @功能描述:由客户端程序调用,配置客户端的IP和端口
* @参数 [in] ip:使用网络字节序表示的ip地址
* @参数 [in] port:对端的端口
*/
VMI_API void VmiConfigClientAddress(unsigned int ip, unsigned int port);
* @功能描述:由客户端程序调用,用于与服务端建立连接,其开始连接的参数通过VmiConfigClientAddress进行设置
* @参数 [in] connection:通信连接描述符
* @参数 [in] ip:使用网络字节序表示的ip地址
* @参数 [in] port:对端的端口
* @返回值:成功返回0,;错误时返回负数并设置errno
*/
VMI_API int VmiBeginConnect(int connection);
* @功能描述:由客户端程序调用,用于与服务端建立连接
* @参数 [in] connection:通信连接描述符
* @参数 [in] ip:使用网络字节序表示的ip地址
* @参数 [in] port:对端的端口
* @返回值:成功返回0,;若错误时返回-1并设置errno
*/
VMI_API int VmiConnect(int connection, unsigned int ip, unsigned int port);
* @功能描述:发送数据给对端
* @参数 [in] connection:通信连接描述符
* @参数 [in] buf:指向待发送数据的指针
* @参数 [in] len:待发送数据的字节数
* @返回值:发送成功时返回发送的字节数;若错误时返回-1并设置errno
*/
VMI_API ssize_t VmiSend(int connection, const uint8_t* buf, size_t len);
* @功能描述:接收对端发送的数据,阻塞式调用
* @参数 [in] connection:通信连接描述符
* @参数 [in] buf:指向用于存放接收数据的指针
* @参数 [in] len:存放接收数据指针指向内存的字节数
* @返回值:接收成功则返回接收到数据字节数,若错误则返回-1并设置erron
*/
VMI_API ssize_t VmiRecv(int connection, uint8_t* buf, size_t len);
* @功能描述:关闭通信连接
* @参数 [in] connection:通信连接描述符
*/
VMI_API void VmiCloseConnection(int connection);
#ifdef __cplusplus
}
#endif
#endif