2015-07-03 56 views
4

在我们团队的桌面之一,运行这段代码时,我们得到一个奇怪的错误:在C#中绑定套接字时获取无效指针地址?

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结构的参数 的长度小于(sockaddr)的大小 。

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

桌面是ip4启用,这是唯一的机器,我们有这个问题。我们甚至更换了网卡,但错误仍然存​​在。

任何想法在哪里看?

+0

您试图绑定的IP地址实际上存在于计算机上?尝试使用此代码绑定到回送地址(127.0.0.1),并且仍然收到相同的错误消息? – Shar1er80

+1

sIPDaddress的价值是什么? – CristiFati

+0

所有其他计算机是否具有相同的IP设置?启用了IPv4并禁用了IPv6? –

回答

0

我发现上面的代码上方的行:

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

我切换这对:

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

和它的工作。

仍然不确定为什么这发生在一个开发人员机器上,而不是其他人。

我注意到的是,当我在工作的开发机器上进行ipconfig时,显示了一个Link-local IPV6地址。但是,在非工作机器上,不存在Link-local IPV6地址的条目。不确定这是否相关。