开源的Neuron代码问题

inline static int neu_send_msg_to(int fd, struct sockaddr_un *addr,
neu_msg_t *msg)
{
int ret = sendto(fd, &msg, sizeof(neu_msg_t *), 0, (struct sockaddr *) addr,
sizeof(*addr));
return sizeof(neu_msg_t *) == ret ? 0 : ret;
}

inline static int neu_recv_msg_from(int fd, struct sockaddr_un *addr,
neu_msg_t **msg_p)
{
neu_msg_t *msg = NULL;
socklen_t addr_len = sizeof(struct sockaddr_un);
int ret = recvfrom(fd, &msg, sizeof(neu_msg_t *), 0,
(struct sockaddr *) addr, &addr_len);
if (sizeof(neu_msg_t *) != ret) {
// recvfrom may return 0 bytes
return 0 == ret ? -1 : ret;
}
*msg_p = msg;
return 0;
}

主要问题
错误的缓冲区使用:&msg 传递的是指针的地址,而不是指针指向的缓冲区

大小参数错误:sizeof(neu_msg_t *) 是指针的大小(通常4或8字节),不是消息大小

内存未分配:msg 初始化为 NULL,没有分配实际的内存空间

//-----------------------------------------------------------------------------
inline static int neu_send_msg_to(int fd, struct sockaddr_un *addr,
neu_msg_t *msg)
{
int ret = sendto(fd, &msg, sizeof(neu_msg_t *), 0, (struct sockaddr *) addr,
sizeof(*addr));
return sizeof(neu_msg_t *) == ret ? 0 : ret;
}

neu_msg_t *msg = calloc(1, total); 这个内存是动态分配的, sizeof(neu_msg_t *) 怎么计算出msg的长度呢?

大体明白了,传输的是msg指针而不是msg数据