懂 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一下到综合区,请删贴
一直是 后两个bind 返回 -1,如果不设置reuseport,只有第一个返回0,其他 -1 本帖最后由 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吧。 说明你没有仔细阅读bind()函数的用法和返回信息。返回-1,说明你的端口已经绑定过了,不能重新绑定。
调试C程序需要耐心,而且要随时关注函数的返回值。如果返回-1,请调用另一个函数可以获得错误的详细信息以确定是不是端口被占用。具体你可以百度下C语言bind()的用法。 不懂帮顶都是大神啊! 初中生都在学C了啊,没学Python吗? azure911 发表于 2023-9-1 10:56
初中生都在学C了啊,没学Python吗?
面向的对象及内容不一样吧?
C好像偏向系统及应用的底层设计。
python好像比较偏向网络应用数据处理 都这么卷了吗,初中都在学c ppowers 发表于 2023-8-31 20:15
说明你没有仔细阅读bind()函数的用法和返回信息。返回-1,说明你的端口已经绑定过了,不能重新绑定。
调 ...
我tcp绑定完了,udp再绑定同样的端口,是这个问题吗 slore 发表于 2023-8-31 18:48
吧。
IPv4, IPv6, TCP, UDP分别绑定。
感谢 进来学习
页:
[1]