2011-05-11 30 views
1

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

有没有办法抑制所有消息被打印?我可以自己处理错误,我不需要系统以我的名义不受控制地进行操作。

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

感谢您的帮助。

回答

4

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

+0

我没有使用任何库,我直接使用系统套接字调用。我原以为这些调用不会打印任何东西,但是在我的整个应用程序中只有一个printf,并且只打印没有提供的端口号。 – steveo225 2011-05-11 12:31:19

+1

我绝对会从应用开始。尝试strace -o log -f -s 1000 ./your_binary并grep日志查看'Operation not permitted'。顺便说一句,你绝对相信这是你的应用程序的stderr这个消息来源? – 2011-05-11 12:37:45

+0

几乎是肯定的,它可能会输出stdout的机会很小。同样,这种情况很少发生,这实际上只是一种烦恼。就像我说的,我很好地处理错误情况,我只是不记录它们,它们被允许发生,偶尔会发生,我不需要看到打印的这条消息(或任何其他)。 – steveo225 2011-05-11 12:48:08

相关问题