2

我正在使用炼金术 websockets并想出足够的东西来让一些东西在 Windows 上工作。我用单声道在 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

为什么我在套接字上被拒绝访问?

4

3 回答 3

2

有几件事要检查

netstat -a | grep 8005查看是否有其他东西正在使用端口 8005

以su身份运行,看看是不是权限问题

sudo mono YourProgram.exe

我没有仔细查看您正在使用的库,但如果它使用 ICMP 或原始套接字,它必须以 root 身份运行。

要查看的另一件事是查看您使用的 DNS 解析是否匹配。沙盒运行时通常只会抱怨这一点,但我见过奇怪的事情发生,而且你没有给我们太多信息。

如果这是一个根本问题,而不是另一个程序正在使用端口 8005,那么您可能可以setcap在 mono 二进制文件上使用,这样您就不必以 root 身份运行它。

以 root 身份运行: setcap cap_net_raw=iep /path/to/mono

于 2012-04-21T00:02:55.910 回答
0

正如Access denied for Alchemy WebSocket creation in Linux/Mono 中所回答的那样

Alchemy 在 843 处抛出一个 Flash 策略文件 - 在实例化您的服务器时尝试关闭 flashsocketpolicy。

于 2012-10-03T23:01:15.947 回答
0

将功能设置为单声道二进制文件。

sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/mono-sgen
于 2021-02-03T21:13:41.290 回答