Recv
Function Usage
Receives data from the peer end.
Restrictions
The instruction stream engine requires secondary developers to implement the communication module for sending and receiving data. This function is an external symbol to be implemented in the communication module by secondary developers. The instruction stream engine calls this function to receive data. This function must be called in blocking mode.
Prototype
ssize_t Recv(int connection, uint8_t *buf, size_t len)
Parameters
Parameter |
Input/Output |
Type |
Description |
|---|---|---|---|
connection |
Input |
int |
Connection handle returned by OnNewConnectionCallback |
buf |
Input |
uint8_t * |
Memory pointer that points to the received data. |
len |
Input |
size_t |
Length of the memory for storing the received data. The size cannot exceed 64 KB. |
Returns
Data type: ssize_t
The value can be:
- > 0: Number of received data bytes
- -1: No data is received. You can call this API again.
- -2: Disconnected
Example Call
// The function prototype declaration is implemented by users.
using OnNewConnectionCallback = void (*)(int connection);
using RegConnectionCBFunc = int (*)(OnNewConnectionCallback newConnCb);
using CloseConnectionFunc = int (*)(int connection);
using SendFullyFunc = ssize_t (*)(int connection, uint8_t *buf, size_t len);
using RecvFunc = ssize_t (*)(int connection, uint8_t *buf, size_t len);
const char *soPath = "./libCommunication.so";
//The callback function notifies the server that a new connection has been established, which is implemented by the cloud phone engine.
// The input parameter connection indicates the valid handle to the new connection.
static void OnNewConnection(int conn);
void Test()
{
// Function symbol for dynamically loading the dynamic communication library
void *handle = dlopen(soPath, RTLD_GLOBAL | RTLD_LAZY | RTLD_NODELETE);
RegConnectionCBFunc regConnection = (RegConnectionCBFunc)dlsym(handle, "RegConnectionCB");
CloseConnectionFunc closeConnection = (CloseConnectionFunc)dlsym(handle, "CloseConnection");
SendFullyFunc sendFully = (SendFullyFunc)dlsym(handle, "SendFully");
RecvFunc recvData = (RecvFunc)dlsym(handle, "Recv");
size_t bufSize = 1024;
uint8_t *data = malloc(bufSize);
// Connect to the server.
int connRet = regConnection(OnNewConnection);
// Send data.
ssize_t ret = sendFully(conn, data, bufSize);
// Receive data.
ret = recvData(conn, data, bufSize);
// Release resources.
free(data);
closeConnection(conn);
dlclose(handle);
}