我的程序大概长这样:
// 省略include
pthread_mutex_t mutex;
int sock_command;
struct sockaddr_in addr_send, addr_p;
void sendFunc(参数列表){
unsigned char command_array[20];
// 此处省略command_array的定义(即将发送的数据)
pthread_mutex_lock(&mutex);
memset(&addr_send, 0, sizeof(struct sockaddr_in));
addr_send.sin_family = AF_INET;
addr_send.sin_port = htons(robot_command_ports);
addr_send.sin_addr.s_addr = inet_addr(robot_addrs);
int send_num = sendto(sock_command, (char *)command_array, arr_len, 0, (struct sockaddr *)&addr_send, sizeof(addr_send));
pthread_mutex_unlock(&mutex);
if(send_num < 0)
{
perror("sendto error");
exit(1);
}
}
int main(int argc, char* argv[]) {
int on=1;
sock_command = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_command < 0)
{
perror("Send-data socket created fail");

程序在使用UDP Socket时遇到`sendto error: Socket operation on non-socket`的问题。通过gdb调试发现,全局静态变量sock_command在主线程与创建的线程中值不同,主线程中为正确的socket文件描述符,而线程中变为0。将socket定义为静态变量后,问题得到解决。
最低0.47元/天 解锁文章
1159

被折叠的 条评论
为什么被折叠?



