sendto error: Socket operation on non-socket (UDP Socket)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的程序大概长这样:

// 省略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");
     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值