我正在使用alchemy websockets并想出足够的东西在Windows上运行。我使用mono在linux(ubuntu)上构建了炼金术并运行了我的服务器。它收到套接字错误。端口> 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
为什么我在套接字上被拒绝访问?
答案 0 :(得分:2)
要检查的一些事项
netstat -a | grep 8005
看看是否有其他东西正在使用端口8005
以su身份运行以查看是否存在权限问题
sudo mono YourProgram.exe
我没看好您正在使用的库,但如果它使用ICMP或Raw Sockets,则必须以root身份运行。
要看的另一件事是查看您使用的DNS解析是否匹配。沙盒运行时通常只会抱怨这个,但我发现有些奇怪的事情发生了,你还没有给我们提供太多的信息。
如果是根本问题而不是另一个程序正在使用端口8005,那么您可以在单声道二进制文件上使用setcap
,这样您就不必以root身份运行它。
以root身份运行:
setcap cap_net_raw=iep /path/to/mono
答案 1 :(得分:0)
在Access denied for Alchemy WebSocket creation in Linux/Mono
回答Alchemy在843处抛出一个Flash Policy文件 - 尝试在实例化服务器时关闭flashsocketpolicy。
答案 2 :(得分:0)
将功能设置为单声道二进制文件。
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/mono-sgen