我正在使用alchemy websockets并弄清楚了足够的东西可以在 Windows 上运行。我在 Linux (ubuntu) 上用 mono 构建了 alchemy 并运行了我的服务器。它收到套接字错误。端口 >1k(确切地说是端口 8005)
Unhandled Exception: System.Net.Sockets.SocketException: Access denied
at System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end) [0x00000] in <filename unknown>:0
at System.Net.Sockets.TcpListener.Start (Int32 backlog) [0x00000] in <filename unknown>:0
at System.Net.Sockets.TcpListener.Start () [0x00000] in <filename unknown>:0
at Alchemy.TcpServer.Listen (System.Object state) [0x00000] in <filename unknown>:0
从文件名来看,我似乎忘记使用调试信息进行构建或没有安装符号,但我确实在单声道上成功构建了。它使用.NET 4.0 mono 2.10
为什么我的套接字访问被拒绝?
最佳答案
一些需要检查的事情
netstat -a | grep 8005
查看是否有其他东西正在使用端口 8005
以su身份运行看看是否是权限问题
sudo mono YourProgram.exe
我没有仔细查看您正在使用的库,但如果它使用 ICMP 或原始套接字,则必须以 root 身份运行。
另一件需要注意的事情是查看您使用的 DNS 解析是否匹配。沙盒运行时通常只会提示这一点,但我已经看到了奇怪的事情发生,而您没有给我们太多信息来继续。
如果这是一个根本问题,而不是另一个程序正在使用端口 8005,您可能可以在单声道二进制文件上使用setcap
,这样您就不必以 root 身份运行它.
以 root 身份运行:
setcap cap_net_raw=iep/path/to/mono
关于linux - mono/linux 套接字被拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10254954/