【问题标题】:Linux denies permission on socket bind using boost asioLinux 拒绝使用 boost asio 进行套接字绑定
【发布时间】:2014-01-16 12:13:57
【问题描述】:

我在绑定套接字时遇到问题,并且在以用户身份运行程序时被拒绝。这行代码会产生错误。

_acceptor = new boost::asio::ip::tcp::acceptor(io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), serverPort)); 错误是

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'

what(): bind: Permission denied

但是,如果我以 root 身份运行,它可以正常工作。我尝试使用

禁用 apparmor 和防火墙
sudo service apparmor stop
sudo ufw disable

但我仍然有问题。我是否错过了可以拒绝许可的东西? 我真的很想弄清楚这一点,因为我不喜欢以 root 身份运行我的 IDE 和未经验证的程序。

我正在运行安装了所有更新的 xubuntu 13.10。

【问题讨论】:

  • serverPort 的值是多少?第一个 1024 端口仅限于 root 用户,所以如果 serverPort 1024
  • 尝试设置另一个端口,例如 3000,此端口可能仅限于特定的服务/协议
  • Bloddy.... GAAH.... 就是这样。我认为端口是正确的,因为它位于函数的开头,但由于某种原因,我正在使用的第 3 方库之一将值更改为 64。我摆脱了更改,现在它可以工作了!这就是为什么我讨厌使用不确定的库。我很快就要自己写了!
  • 好的,我会添加答案,以便您接受。

标签: c++ linux sockets


【解决方案1】:

在 unix 系统上,第一个 1024 端口仅限于 root 用户,所以如果 serverPort 1024

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2016-10-27
    • 2011-04-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2011-10-15
    • 2011-12-05
    相关资源
    最近更新 更多