【问题标题】:Suppress "Operation not permitted" error from socket抑制来自套接字的“不允许操作”错误
【发布时间】:2011-05-11 20:13:17
【问题描述】:

我有一个处理套接字的小型实用程序,包括 TCP 和 UDP。有时,我将错误“不允许操作”打印到 stderr。我的问题是,我根据套接字函数的返回码(有时是 errno)处理错误,并且不打印任何内容。因此,此消息必须来自其中一个套接字调用。我不确定是哪一个,因为此消息很少出现,因此很难调试,但我认为它来自socketsendto

有没有办法禁止打印所有消息?我可以自己处理错误,我不需要系统代表我不受控制地进行操作。

注意,这是一个仅限 Linux 的应用程序。

感谢您的帮助。

【问题讨论】:

    标签: c++ sockets


    【解决方案1】:

    您是否在套接字 API 之上使用任何库?用于处理套接字的函数不应该向 stderr 打印任何内容。我建议使用strace 和/或ltrace 首先检查此消息的来源。

    【讨论】:

    • 我没有使用任何库,我直接使用系统套接字调用。我原以为这些调用也不会打印任何内容,但我的整个应用程序中只有一个 printf,并且它只是打印未提供时使用的端口号。
    • 我绝对会从 strace'ing 应用程序开始。尝试 strace -o log -f -s 1000 ./your_binary 并在日志中查找“不允许操作”。顺便说一句,你绝对确定这条消息的来源是你应用程序的标准错误?
    • 几乎是肯定的,它可能会进入标准输出的可能性很小。同样,它很少发生,这真的只是一个烦恼。就像我说的,我优雅地处理错误情况,我只是不记录它们,它们被允许发生,它们应该偶尔发生,我只是不需要看到这个消息(或任何其他)打印。
    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2017-12-05
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多