linux - mono/linux 套接字被拒绝?

标签 linux sockets mono

我正在使用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/

相关文章:

c - 为什么 printf() 在下面的代码中打印 0 而不是 10?

javascript - 使用 Node.js 和 Socket.io 定位文件

java - 套接字接受和多线程

使用 mono 的 lidgren 进行 C# 网络编程

c# - 在 CentOS 或 Linux 上使用 Mono 执行 .Net 应用程序

linux - 当本地相同的脚本成功时,通过 ssh 运行脚本失败

linux - 如何让atop排除开机后的统计数据?

linux - Linux 上的 MIDI 环回

java - 在 Socket 中正确处理 chunked Http Response

macos - 使用 Visual Studio Code + ASP.NET 5 + Mono + Kestrel + OS X 调试 Web 项目