Program Listing for File pack_ipc.hpp
↰ Return to documentation for file (include/input/IPC/transmission/linux/pack_ipc.hpp)
#pragma once
#include "ipc_shared_memory.hpp"
#include <sys/socket.h>
namespace PDJE_IPC {
template <typename T, int MEM_PROT_FLAG> struct IPC_SHM_LINUX {
private:
iovec iov = { .iov_base = (void *)"F", .iov_len = 1 };
cmsghdr *cmsg;
public:
msghdr msg = { 0 };
IPC_SHM_LINUX(const SharedMem<T, MEM_PROT_FLAG> &shared_IPC_mem)
{
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
char cmsgbuf[CMSG_SPACE(sizeof(int))];
msg.msg_control = cmsgbuf;
msg.msg_controllen = sizeof(cmsgbuf);
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
memcpy(CMSG_DATA(cmsg), &shared_IPC_mem.FD, sizeof(int));
}
};
}; // namespace PDJE_IPC