SocketErrorCode:10022

Posted 莫行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SocketErrorCode:10022相关的知识,希望对你有一定的参考价值。

    在编写.net的网络服务器时,我使用了裸socket来实现。在windows上,或者在linux上通过.net core来跑时都没有什么问题,但是通过mono运行调用socket.Bind()时却总是报ErrorCode为10022的SocketException,表示参数无效。通过命令netstat -a | grep myport并未发现端口占用现象,担心与权限有关,sudo mono myserver.exe来运行也依然如故。后来用TcpListener来实现,这个问题就没有了。无奈之下,去浏览TcpListener的源码,发现其内部创建socket是这样的:

m_ServerSocketEP = new IPEndPoint(localaddr, port);
m_ServerSocket   = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

    再对比我的代码,发现创建socket时使用的是未指定AddressFamily参数的构造函数。于是指定参数为AddressFamily.Network,这个问题就解决了。应该是不同的平台实现在设置默认AddressFamily参数上有差别导致的。

以上是关于SocketErrorCode:10022的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数