4

我的问题实际上与mono/linux socket denied 相同?但似乎这个问题没有得到正确的回答,所以我仍然被困住了。

我有一个使用 Alchemy WebSockets 编写的服务器。我让它在 Windows 上运行良好,但在将它移植到 Linux 后,我无法让它工作。每次尝试启动套接字服务器时,我都会收到以下错误:

System.Net.Sockets.SocketException: Access denied
  at System.Net.Sockets.Socket.Bind (System.Net.EndPoint local_end) [0x00051] in /build/src/mono-2.10.8/mcs/class/System/System.Net.Sockets/Socket.cs:1104
  at System.Net.Sockets.TcpListener.Start (Int32 backlog) [0x00022] in /build/src/mono-2.10.8/mcs/class/System/System.Net.Sockets/TcpListener.cs:268
  at System.Net.Sockets.TcpListener.Start () [0x00000] in /build/src/mono-2.10.8/mcs/class/System/System.Net.Sockets/TcpListener.cs:243
  at Alchemy.TcpServer.Listen (System.Object state) [0x00000] in <filename unknown>:0

我正在尝试绑定到 1024 以上的端口(在这种情况下特别是 12345),所以这不是问题。我没有运行 AppArmor 或 SELinux 或类似的东西。我的系统上没有使用该端口。如果重要的话,我的用户是“网络”组的成员。如果我使用 sudo 运行我的程序将绑定到套接字,但这显然不是一个理想的情况。

这是我用来创建套接字并开始监听的代码:

    static public void Start(int port, string host)
    {
        _server = new WebSocketServer(port, IPAddress.Parse(host));
        _server.OnConnect = OnConnected;
        _server.OnDisconnect = OnDisconnect;
        _server.Start();
    }

“12345”作为“端口”传递,“192.168.0.11”(我的本地 IP)作为“主机”传递。我也试过 IPAddress.Any 无济于事。

4

2 回答 2

6

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

于 2012-09-26T17:05:42.883 回答
1

这严格来说是一个权限问题

如果我使用 sudo 运行我的程序将绑定到套接字,但这显然不是一个理想的情况。

在 Stackoverflow 的上一篇文章中已经提出了这个问题。 单声道/linux套接字被拒绝?

我会尝试将“用户”添加到 sudo 的组中,这将作为一种快速解决方案进行补救。如果它使用 ICMP 或原始套接字,则必须以 root 用户身份运行。仔细检查 Alchemy 是否没有使用它,如果你在没有超级用户权限的情况下运行它有点不走运。

我尝试将此作为评论发布,但它不允许我,这不是一个真正的答案。

仅供参考所有反对的选民。

于 2012-09-21T18:07:42.760 回答