无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 1974|回复: 6
打印 上一主题 下一主题

[求助] 这些C程序有啥问题

[复制链接]
跳转到指定楼层
1#
发表于 2023-8-28 12:14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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一连,发送几个数据包,多次重连后没有了返回
编译为单线程啥事没有
2#
发表于 2023-8-28 22:43:30 | 只看该作者
你可以去看雪上问问,试试。
回复

使用道具 举报

3#
发表于 2023-8-29 07:25:10 | 只看该作者
使用专用编程软件检查看看

点评

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

使用道具 举报

4#
 楼主| 发表于 2023-8-29 09:20:37 来自手机 | 只看该作者
martin313 发表于 2023-8-29 07:25
使用专用编程软件检查看看

跑在 android 上的 开了 asan,问下,我同时还作了[::]:1053
和0.0.0.0:1053,是不是有冲突?难不成linux在reuseport的时候把ipv4的流量spawn到ipv6上了

点评

推荐 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  详情 回复 发表于 2023-8-29 21:20
在worker里面添加了recvfrom ipv6地址,更糟  详情 回复 发表于 2023-8-29 10:08
回复

使用道具 举报

5#
 楼主| 发表于 2023-8-29 10:08:14 来自手机 | 只看该作者
winpefk 发表于 2023-8-29 09:20
跑在 android 上的 开了 asan,问下,我同时还作了[::]:1053
和0.0.0.0:1053,是不是有冲突?难不成linux ...

在worker里面添加了recvfrom ipv6地址,更糟
回复

使用道具 举报

6#
 楼主| 发表于 2023-8-29 11:18:05 来自手机 | 只看该作者
解决了,加锁(没试过)或者openmp
回复

使用道具 举报

7#
发表于 2023-8-29 21:20:48 | 只看该作者
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.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-29 06:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表