关于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 ",error=WSAGetLastError());
		pDlg->MessageBox(strError,"错误",MB_ICONSTOP);
		closesocket(m_hSocket);
		return;
	}

  

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

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

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

重新试了下,bind成功...

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

时间: 2024-10-28 12:54:48

关于socket通信bind()返回值错误:10049的相关文章

(转)函数中使用 ajax 异步 同步 返回值错误 主函数显示返回值总是undefined -- ajax使用总结

如图检测到函数返回值总是a jQuery ajax 得到返回值 方案1:通过js回调函数获取返回值 方案2: 添加代码: async: false, 1.ajax默认是异步调用的,所以得到的返回值是空值,要得到值必须改成同步:async: false,//同步. 2.必须定义一个全局变量 var result = ""来保存返回值.否则得到的是undefined function GetReturnValue(url, jsonText) { var result = "&q

php的Socket通信以及出现的错误

现在的PYTHON很火,但是我们的PHP也不错!主要是看有没有去挖掘它,去在phper中开更多的脑洞,有时学习框架学累的时候,不妨写写脚本.或许能帮助自己更好的了解PHP. 这里我们就不阐述Socket(套接字)是什么了,这里我们使用常见的C(client)/S(server)模式. 作为服务器端,它的操作socket流程如下: 下面是Server.php的代码 <?php #The script is used to listen the requests from client error_

GetQueuedCompletionStatus返回值的处理顺序

 IOCP 是5种socket 编程模型里最复杂的一种,只使用几个api,就能使程序支持成百上千个连接,而GetQueuedCompletionStatus函数又是IOCP里最重要的api,这个函数返回值含有各种信息. 一般的处理顺序为:是先判断函数GetQueuedCompletionStatus的返回值,如果失败,看看WSAGetLastError()的值.否则检查OVERLAPP结构体是否为NULL,不为NULL,就判断OVERLAPPED相关的东西和传输的字节数等等. 先看看GetQ

【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TCPEch

Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理

我们用慢系统调用来描写叙述那些可能永远阻塞的系统调用(函数调用),如:accept.read等.永远阻塞的系统调用是指调用有可能永远无法返回.多数网络支持函数都属于这一类.比如,假设没有客户连接到server上,则server对accept的调用就没有返回保证.类似的.假设客户从未发送过一行要求server回射的文本.则server对read的调用将永不返回.其它慢系统调用的样例是对管道和终端设备的读写. 有一个例外,就是磁盘IO.他一般都返回调用者. 当一个进程阻塞与慢系统调用时捕获到一个信号

基于返回值的错误处理与异常处理机制

基于返回的错误处理和异常处理机制的比较 一.基于返回值的错误处理机制 对于传统的面向过程语言比如说C语言,通常使用基于返回值的错误处理机制,即通过在程序中定义程序出错时的返回值,比如说0代表操作成功,而1代表操作失败. 这种错误处理机制的好处在于有时候即使出现了异常程序或许也可以继续执行(但是最终执行结果或许不对,而这就导致查错比较困难,因为有时候仅仅通过函数返回值我们并不知道程序出错的原因究竟是什么,比如说程序操作失败返回值为0,我们在控制台上看到程序输出为0,但是除此之外没有其他额外的信息帮

JsonResult作为Action返回值时的错误

JsonResult作为Action返回值时的错误 System.InvalidOperationException: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to

phoenixframe平台连接socket服务器,并接收返回值的示例

package org.phoenix.cases.webservice; import java.util.LinkedList; import org.phoenix.action.WebElementActionProxy; import org.phoenix.model.CaseLogBean; import org.phoenix.model.UnitLogBean; import org.phoenix.utils.NetTelnet; /** * phoenixframe平台连接

read的返回值结论(针对于普通文件描述符和管道或socket文件描述符情况划分)

关于read函数的返回值分析: 情况一:(读取普通文件而言) 01.阻塞情况 read函数从打开的设备或文件中读取数据. read/write  (read和write函数会读取\n换行) #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 函数参数: n  fd:文件描述符 n  buf:读上来的数据保存在缓冲区buf中 n  count:buf缓冲区存放的最大字节数 函数返回值: n  >0:读取的字节