Linux中的recvmsg函數(shù)用于從套接字接收數(shù)據(jù)并存儲(chǔ)到指定的緩沖區(qū)中。其基本用法如下:
#include <sys/socket.h>
#include <sys/types.h>
struct iovec iov;
struct msghdr msg;
char buf[1024]; // 緩沖區(qū)
iov.iov_base = buf; // 設(shè)定數(shù)據(jù)存儲(chǔ)位置
iov.iov_len = sizeof(buf); // 緩沖區(qū)大小
msg.msg_name = NULL; // 不需要指定地址
msg.msg_namelen = 0;
msg.msg_iov = &iov; // 指定緩沖區(qū)
msg.msg_iovlen = 1; // 緩沖區(qū)數(shù)量
ssize_t num_bytes = recvmsg(sockfd, &msg, 0);
if (num_bytes > 0) {
// 數(shù)據(jù)接收成功,處理接收到的數(shù)據(jù)
} else if (num_bytes == 0) {
// 連接關(guān)閉
} else {
// 接收數(shù)據(jù)失敗
}
注意:在實(shí)際使用中,還需要對(duì)返回值和接收到的數(shù)據(jù)進(jìn)行錯(cuò)誤處理和解析。