socket connect返回-1_closesocket函数返回值

socket connect返回-1_closesocket函数返回值前几天偶尔收到一个朋友的求救,要编写一个IPV6的socket编程开始以为这个问题很容易,因为socket已经兼容IPV4和IPV6的,改下那几个接口就可以了然后….被卡住了….修改了参数为IPV6的参数以后,在bind的时候始终包10049错误.按照MSDN的说法,10049的意思

大家好,欢迎来到IT知识分享网。

前几天偶尔收到一个朋友的求救,要编写一个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 ",error=WSAGetLastError());
		pDlg->MessageBox(strError,"错误",MB_ICONSTOP);
		closesocket(m_hSocket);
		return;
	}        

  

检视的过程中发现,排除socket的配置错误,唯一一个可能的地方

定义sockaddr_in6 结构体的时候没有初始化…

因此加了一句 memset(&addr, 0, sizeof(addr));

重新试了下,bind成功…

 

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29673.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信