winsock bind 本地地址出现10049错误

lookupheaven 2014-03-04 11:09:46
为什么Server端bind本地地址192.166.68.60会出现10049错误:在其上下文中,该请求的地址无效。
而改为INADDR_ANY就没问题?
代码如下:
struct sockaddr_in sa;
ZeroMemory(&sa, sizeof(struct sockaddr_in));
sa.sin_family = AF_INET;
sa.sin_port = htons(0x1234);
sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY/*inet_addr("192.166.68.60")*/);

if (::bind(listener, (LPSOCKADDR)&sa, sizeof(struct sockaddr_in)) == SOCKET_ERROR)
{
int err = WSAGetLastError();
……
}
...全文
548 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
盛夏 2014-03-04
  • 打赏
  • 举报
回复
引用 4 楼 Razor87 的回复:
[quote=引用 3 楼 yiyefangzhou24 的回复:] 谁说第二个参数中INADDR_ANY代表本机ip? servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!
童鞋,尼看错了,开始制定本地地址失败,换成INADDR_ANY就ok了...[/quote] 他没看错,你理解错了。 他说的客户端就是你说的这个本地,INADDR_ANY代表不指定本机固定IP 你去查一查htonl是什么意思,不是这么用的 sa.sin_addr.S_un.S_addr 这个类型跟 htonl返回类型不匹配,所以赋值过去以后出现的东西不是你想的那样,debug一下完全可以看出来这到底哪里错了
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
引用 3 楼 yiyefangzhou24 的回复:
谁说第二个参数中INADDR_ANY代表本机ip? servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!
童鞋,尼看错了,开始制定本地地址失败,换成INADDR_ANY就ok了...
yiyefangzhou24 2014-03-04
  • 打赏
  • 举报
回复
谁说第二个参数中INADDR_ANY代表本机ip? servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
去掉htonl就ok了。。
sduxiaoxiang 2014-03-04
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/50433076 一个老帖子,不知道有没有用
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
吾将结此贴也
mujiok2003 2014-03-04
  • 打赏
  • 举报
回复
引用 8 楼 Razor87 的回复:
我跟踪了一下,果然是我多此一举了,inet_addr自动完成主机序到网络序的完成,调用htonl又转成主机序了。
+++
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
我跟踪了一下,果然是我多此一举了,inet_addr自动完成主机序到网络序的完成,调用htonl又转成主机序了。
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
引用 6 楼 Razor87 的回复:
好吧,不争看错看对了, 巴特,sa.sin_addr.S_un.S_addr类型是ULONG, MDSN:typedef unsinged long ULONG; htonl的原型:unsigned long __stdcall htonl(const char* cp); 这两者类型是一样的。
打错,说的是inet_addr函数的原型。 inet_addr返回值类型是unsigned long,这与htonl的参数类型、返回值类型u_long是一样的
lookupheaven 2014-03-04
  • 打赏
  • 举报
回复
引用 5 楼 wyc6668205 的回复:
[quote=引用 4 楼 Razor87 的回复:] [quote=引用 3 楼 yiyefangzhou24 的回复:] 谁说第二个参数中INADDR_ANY代表本机ip? servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!
童鞋,尼看错了,开始制定本地地址失败,换成INADDR_ANY就ok了...[/quote] 他没看错,你理解错了。 他说的客户端就是你说的这个本地,INADDR_ANY代表不指定本机固定IP 你去查一查htonl是什么意思,不是这么用的 sa.sin_addr.S_un.S_addr 这个类型跟 htonl返回类型不匹配,所以赋值过去以后出现的东西不是你想的那样,debug一下完全可以看出来这到底哪里错了[/quote] 好吧,不争看错看对了, 巴特,sa.sin_addr.S_un.S_addr类型是ULONG, MDSN:typedef unsinged long ULONG; htonl的原型:unsigned long __stdcall htonl(const char* cp); 这两者类型是一样的。

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧