Rate This Document
Findability
Accuracy
Completeness
Readability

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);
}