您的当前位置:首页正文

关于socket通信bind()返回值错误:10049

来源:九壹网
关于socket通信bind()返回值错误:10049

前⼏天偶尔收到⼀个朋友的求救,要编写⼀个IPV6的socket编程

开始以为这个问题很容易,因为socket已经兼容IPV4和IPV6的,改下那⼏个接⼝就可以了然后....被卡住了....

修改了参数为IPV6的参数以后,在bind的时候始终包10049错误.按照MSDN的说法,10049的意思表⽰找不到那个IP.

但是我服务器端bind监听的socket的时候,是不应该出这个问题的...遍历⽆果,只能通过检视代码来找可能的错误.

CString strError; m_hSocket;

sockaddr_in6 addr;

addr.sin6_family=AF_INET6;//表⽰在INT上通信 addr.sin6_addr =in6addr_any;

//inet_pton(AF_INET6,DEFAULT_IP,&addr.sin6_addr); addr.sin6_port=htons(8000);

int ret=0; int error=0;

ret=bind(m_hSocket,(struct sockaddr *)&addr,sizeof(struct sockaddr_in6));//绑定 if(ret==SOCKET_ERROR) {

strError.Format(\"绑定失败:%d \ pDlg->MessageBox(strError,\"错误\ closesocket(m_hSocket); return; }

  

检视的过程中发现,排除socket的配置错误,唯⼀⼀个可能的地⽅定义sockaddr_in6 结构体的时候没有初始化...因此加了⼀句 memset(&addr, 0, sizeof(addr));重新试了下,bind成功...

这个事情告诉我们,⼀定要遵守编程规范....

因篇幅问题不能全部显示,请点此查看更多更全内容

Top