无忧启动论坛

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

[求助] 懂 C 语言 的大佬 帮个忙

[复制链接]
跳转到指定楼层
1#
发表于 2023-8-31 16:14:31 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 winpefk 于 2023-8-31 16:17 编辑

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

                int h=bind(fd_inet6[i*2],(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("[E] Crash ! ========================\n");
                        printf("[E] Bind failed !\n");
                        printf("[E] Status : i = %d,fd_inet4(udp) = %d,fd_inet6 (udp) = %d\n",i,e>
                        printf("[E] Status : fd_inet4(tcp) = %d , fd_inet6(tcp) = %d\n",g,h);
                        printf("[E] Crash ! ========================\n");
                        return -1;
                }
        }

啥问题?

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

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

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

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

2#
 楼主| 发表于 2023-8-31 16:15:43 来自手机 | 只看该作者
一直是 后两个bind 返回 -1,如果不设置reuseport,只有第一个返回0,其他 -1
回复

使用道具 举报

3#
发表于 2023-8-31 18:48:03 | 只看该作者
本帖最后由 slore 于 2023-8-31 18:55 编辑


  1.                 int e=bind(fd_inet4[get_max_threads() + i],(struct sockaddr *)&inet4tab,sizeof(inet4tab));
  2.                 int f=bind(fd_inet6[get_max_threads() + i],(struct sockaddr *)&inet6tab,sizeof(inet6tab));
  3.                 int e=bind(fd_inet4[i],(struct sockaddr *)&inet4tab,sizeof(inet4tab));
  4.                 int f=bind(fd_inet6[i],(struct sockaddr *)&inet6tab,sizeof(inet6tab));
复制代码


吧。

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

点评

感谢  详情 回复 发表于 2024-2-7 09:28
回复

使用道具 举报

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

点评

我tcp绑定完了,udp再绑定同样的端口,是这个问题吗  详情 回复 发表于 2023-9-2 21:21
回复

使用道具 举报

5#
发表于 2023-9-1 08:42:04 | 只看该作者
不懂帮顶  都是大神啊!
回复

使用道具 举报

6#
发表于 2023-9-1 10:56:40 | 只看该作者
初中生都在学C了啊,没学Python吗?

点评

面向的对象及内容不一样吧? C好像偏向系统及应用的底层设计。 python好像比较偏向网络应用数据处理  详情 回复 发表于 2023-9-1 11:22
回复

使用道具 举报

7#
发表于 2023-9-1 11:22:15 | 只看该作者
azure911 发表于 2023-9-1 10:56
初中生都在学C了啊,没学Python吗?

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

使用道具 举报

8#
发表于 2023-9-2 19:36:41 | 只看该作者
都这么卷了吗,初中都在学c
回复

使用道具 举报

9#
 楼主| 发表于 2023-9-2 21:21:53 来自手机 | 只看该作者
ppowers 发表于 2023-8-31 20:15
说明你没有仔细阅读bind()函数的用法和返回信息。返回-1,说明你的端口已经绑定过了,不能重新绑定。
调 ...

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

使用道具 举报

10#
 楼主| 发表于 2024-2-7 09:28:38 | 只看该作者
slore 发表于 2023-8-31 18:48
吧。

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

感谢
回复

使用道具 举报

11#
发表于 2024-2-8 20:07:09 | 只看该作者
进来学习
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-5 04:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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