c++ - C socket 绑定 DNS端口错误
大家讲道理
大家讲道理 2017-04-17 11:12:07
[C++讨论组]
// Create a socket
server_s = socket(AF_INET, SOCK_DGRAM/*SOCK_STREAM*/, IPPROTO_UDP/*0*/);
if(server_s == -1){
    fprintf(stderr, "socket error.\n");
    exit(-1);
}
// Fill-in my socket's address information and bind the socket
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(53);
server_addr.sin_addr.s_addr = inet_addr("192.168.137.1");/*htonl(INADDR_BROADCAST);*//*htonl(INADDR_ANY);*/
if(bind(server_s, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1){
    fprintf(stderr, "Bind error.\n");
    exit(-1);
}

在win7下设置防火墙允许访问53端口,绑定192.168.137.1:80可以顺利实现监听,绑定53后bind便会返回-1错误。为什么绑定会失败? 下面是DNS端口抓包:

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
巴扎黑

有可能你的电脑此端口已经被DNS Client占用。。 命令行模式下 netstat -an 查看 UDP端口53是否已经存在。。

黄舟

bind会把失败原因存在errno全局变量里,用strerror(errno)获得bind失败的原因。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号