2011-05-11 51 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