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的长度呢?