无忧启动论坛

标题: 这些C程序有啥问题 [打印本页]

作者: winpefk    时间: 2023-8-28 12:14
标题: 这些C程序有啥问题
in main.c
........
for (int i=0;i<get_max_threads();i++){
                args.id=i;
                pthread_create(threads_tab+i,NULL,worker,&args);
        }
.........

in udp.h
..........
struct worker_args {
        int id;

        int * fd_inet4;
        int * fd_inet6;

        char ** buffer_udp;
        struct sockaddr ** addr_tab;
        char ** ip_from_chbfr;
};

void * worker(void * args){
        pthread_detach(pthread_self());

        if (args == NULL){
                printf("[E] Crash! \n");
                exit(0);
        }
        int id=( ( (struct worker_args *)args ) -> id);
        int * fd_inet4 = ( ( (struct worker_args *)args ) -> fd_inet4);
        int * fd_inet6 = ( ((struct worker_args *)args) -> fd_inet6);
        char ** buffer_udp = ( ((struct worker_args *)args) -> buffer_udp);
        struct sockaddr ** addr_tab = ( ((struct worker_args *)args) -> addr_tab);
        char ** ip_from_chbfr = ( ((struct worker_args *)args) -> ip_from_chbfr);

        printf("[I] Worker %d is listener ! \n",id );

        for(;;){
                 memset(buffer_udp[id],0,512);

                int size=sizeof(struct sockaddr_in);                                                                  
                unsigned int got_len=recvfrom(fd_inet4[id],buffer_udp[id],512,MSG_DONTWAIT,addr_tab[id],(socklen_t *)&size
                sendto(fd_inet4[id],buffer_udp[id],got_len,0,addr_tab[id],size);
        }
        return NULL;
}
.............
fd_inet4 , buffer_UDP, addr-tab 按照 id 取值,id是用for循环获得(id=1,2,3,4,5,6,0)
八个线程同时recvfrom八个socket 绑定在同一个ip:port udp,使用reuseport获得任务负载均衡

已知问题:加上其他源码,在android ndk中编译通过,但是启动后用netcat一连,发送几个数据包,多次重连后没有了返回
编译为单线程啥事没有

作者: 610644034    时间: 2023-8-28 22:43
你可以去看雪上问问,试试。
作者: martin313    时间: 2023-8-29 07:25
使用专用编程软件检查看看
作者: winpefk    时间: 2023-8-29 09:20
martin313 发表于 2023-8-29 07:25
使用专用编程软件检查看看

跑在 android 上的 开了 asan,问下,我同时还作了[::]:1053
和0.0.0.0:1053,是不是有冲突?难不成linux在reuseport的时候把ipv4的流量spawn到ipv6上了
作者: winpefk    时间: 2023-8-29 10:08
winpefk 发表于 2023-8-29 09:20
跑在 android 上的 开了 asan,问下,我同时还作了[::]:1053
和0.0.0.0:1053,是不是有冲突?难不成linux ...

在worker里面添加了recvfrom ipv6地址,更糟
作者: winpefk    时间: 2023-8-29 11:18
解决了,加锁(没试过)或者openmp
作者: martin313    时间: 2023-8-29 21:20
winpefk 发表于 2023-8-29 09:20
跑在 android 上的 开了 asan,问下,我同时还作了[::]:1053
和0.0.0.0:1053,是不是有冲突?难不成linux ...

推荐 Source Insight 4.00.0131

Source Insight is a project-based editor, code scanner and powerful analyzer that helps you better understand the code. It provides a dynamic analyzer for languages C / C ++, C # , Java, Objective-C is. Easily view and search hierarchical method calls inheritance and dependencies within the code to estimate the cost of the new changes.




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3