代码如下 m_target_addr=(sockaddr_un*)malloc(sizeof (sockaddr_un)); memset(m_target_addr,0,sizeof(sockaddr_un)); m_target_addr->sun_family = AF_UNIX; sprintf(m_target_addr->sun_path,"/tmp/video_un_player_socket_%s","101010101"); int n=sendto(m_socket,buffer,send_len,0, (struct sockaddr*)&m_target_addr,(socklen_t)sizeof(m_target_addr)); if(n==-1){ logi("send socket %d,buffer %d,len %d,addrsize %d,to %s",m_socket,buffer,send_len,sizeof(m_target_addr),strerror(errno)); }
时间: 2024-03-20 07:39:25 浏览: 109
Linux C中sockaddr和sockaddr_in的区别
5星 · 资源好评率100%
您的问题出在第四个参数 `(struct sockaddr*)&m_target_addr` 上。实际上,m_target_addr已经是一个指向sockaddr_un的结构体指针,因此在sendto函数中不需要再取一次地址。修改代码如下即可:
```
int n = sendto(m_socket, buffer, send_len, 0, (struct sockaddr*)m_target_addr, sizeof(sockaddr_un));
if (n == -1) {
logi("send socket %d, buffer %d, len %d, addrsize %d, to %s", m_socket, buffer, send_len, sizeof(*m_target_addr), strerror(errno));
}
```
注意,第四个参数应该是 `m_target_addr` 而不是 `&m_target_addr`,第五个参数应该是 `sizeof(sockaddr_un)` 而不是 `sizeof(m_target_addr)`。
阅读全文