winpefk 发表于 2023-8-31 16:14:31

懂 C 语言 的大佬 帮个忙

本帖最后由 winpefk 于 2023-8-31 16:17 编辑

这坨我写的东西
for (unsigned int i=0;i < get_max_threads();i++){
                int g=bind(fd_inet4,(struct sockaddr *)&inet4tab,sizeof(inet4tab));

                int h=bind(fd_inet6,(struct sockaddr *)&inet6tab,sizeof(inet6tab));

                int e=bind(fd_inet4,(struct sockaddr *)&inet4tab,sizeof(inet4tab));

                int f=bind(fd_inet6,(struct sockaddr *)&inet6tab,sizeof(inet6tab));

                if ( e == -1 || f == -1 ||g == -1||h == -1){
                        printf(" Crash ! ========================\n");
                        printf(" Bind failed !\n");
                        printf(" Status : i = %d,fd_inet4(udp) = %d,fd_inet6 (udp) = %d\n",i,e>
                        printf(" Status : fd_inet4(tcp) = %d , fd_inet6(tcp) = %d\n",g,h);
                        printf(" Crash ! ========================\n");
                        return -1;
                }
      }

啥问题?

注:get_max_threads() 开启 openmp 则返回8
本文中所有变量都已经申请足够的内存,不存在越界

fd_inet4 && fd_inet6 :顾名思义,套接字 fd
inet4tab:没错,是: 0.0.0.0:1053 字符串转换的表

(我摊牌了,现在初二,暑假最后一天)
初学网络操作,随便喷。AI 没问到结果。

可能发在这个区不太合适,待会儿我copy一下到综合区,请删贴

winpefk 发表于 2023-8-31 16:15:43

一直是 后两个bind 返回 -1,如果不设置reuseport,只有第一个返回0,其他 -1

slore 发表于 2023-8-31 18:48:03

本帖最后由 slore 于 2023-8-31 18:55 编辑



                int e=bind(fd_inet4,(struct sockaddr *)&inet4tab,sizeof(inet4tab));
                int f=bind(fd_inet6,(struct sockaddr *)&inet6tab,sizeof(inet6tab));
                int e=bind(fd_inet4,(struct sockaddr *)&inet4tab,sizeof(inet4tab));
                int f=bind(fd_inet6,(struct sockaddr *)&inet6tab,sizeof(inet6tab));


吧。

IPv4, IPv6, TCP, UDP分别绑定。
不过UDP绑定时, inet4tab 还得重新更新协议类型,sin_family, sin_port吧。

ppowers 发表于 2023-8-31 20:15:22

说明你没有仔细阅读bind()函数的用法和返回信息。返回-1,说明你的端口已经绑定过了,不能重新绑定。
调试C程序需要耐心,而且要随时关注函数的返回值。如果返回-1,请调用另一个函数可以获得错误的详细信息以确定是不是端口被占用。具体你可以百度下C语言bind()的用法。

879792799 发表于 2023-9-1 08:42:04

不懂帮顶都是大神啊!

azure911 发表于 2023-9-1 10:56:40

初中生都在学C了啊,没学Python吗?

liangzr1976 发表于 2023-9-1 11:22:15

azure911 发表于 2023-9-1 10:56
初中生都在学C了啊,没学Python吗?

面向的对象及内容不一样吧?
C好像偏向系统及应用的底层设计。
python好像比较偏向网络应用数据处理

dvs909 发表于 2023-9-2 19:36:41

都这么卷了吗,初中都在学c

winpefk 发表于 2023-9-2 21:21:53

ppowers 发表于 2023-8-31 20:15
说明你没有仔细阅读bind()函数的用法和返回信息。返回-1,说明你的端口已经绑定过了,不能重新绑定。
调 ...

我tcp绑定完了,udp再绑定同样的端口,是这个问题吗

winpefk 发表于 2024-2-7 09:28:38

slore 发表于 2023-8-31 18:48
吧。

IPv4, IPv6, TCP, UDP分别绑定。


感谢

yyz2191958 发表于 2024-2-8 20:07:09

进来学习
页: [1]
查看完整版本: 懂 C 语言 的大佬 帮个忙