在C#中绑定套接字时获取无效的指针地址?

时间:2015-07-03 16:14:17

标签: c# sockets networking

在我们的一个桌面桌面上,运行此代码时出现了一个奇怪的错误:

IPAddress ipaddress = IPAddress.Parse(sIPDaddress);
var endpoint = new IPEndPoint(ipaddress, m_iPort);
listener.Bind(endpoint);
listener.Blocking = true;
listener.Listen(-1);

我们在bind命令上收到以下10014错误:

  

WSAEFAULT 10014地址错误。系统检测到无效指针   尝试使用调用的指针参数时的地址。这个错误   如果应用程序传递无效的指针值,或者如果   缓冲区的长度太小。例如,如果长度为   参数,一个sockaddr结构,小于   的sizeof(sockaddr的)。

我们最初认为这是一个网络问题但是我的笔记本电脑在连接到他的网络端口时运行相同的代码。

桌面启用了ip4,这是我们遇到此问题的唯一机器。我们甚至改变了网卡,但错误仍然存​​在。

任何想法在哪里看?

1 个答案:

答案 0 :(得分:0)

我在上面的代码上方找到了一行:

Socket listener = new Socket(0, SocketType.Stream, ProtocolType.Tcp);

我将其改为:

Socket listener = new Socket(AddressFamily.InterNetwork, 
                              SocketType.Stream, ProtocolType.Tcp);

并且有效。

仍然不确定为什么这会发生在开发者机器上而不是其他机器上。

我注意到的是当我在正在运行的开发机器上执行ipconfig时,显示了一个本地链接IPV6地址。但是,在非工作机器上没有链接本地IPV6地址的条目。不确定这是否相关。