我正在運行使用TCP套接字的網絡程序的測試。要驗證錯誤修復,我需要在套接字層重現一個「Broken pipe」錯誤,但我不知道如何。任何想法?非常感謝。如何注入「破管」錯誤?
回答
「斷開的管道」表示您已寫入已由對等關閉的連接。所以,讓同伴關閉連接。
一個「Broken pipe」錯誤消息通常來自shell,因爲它檢測到它創建的子由於SIGPIPE信號而退出。所以你可以通過SIGPIPE殺死一個孩子(kill -PIPE %1
殺死第一個後臺命令)手動導致一個。
SIGPIPE由內核生成併發送到任何進程,在另一端關閉後嘗試寫入管道或套接字。
我的代碼檢查 「發送()」 的返回值,並且使用「perror()」打印錯誤。如果它是一個真正的「破碎的管道」,perror將打印出來。但是對於你的方法,程序退出而不打印任何錯誤。 – user180574
然後你在某個地方缺少測試,或者程序已經發送了大部分數據。 – EJP
我環顧四周,無法找到任何地方記錄的程序,所以在這裏你去。
我在我的ssh配置中找到了一個使用'nc'proxy命令的服務器。
主機服務器
ProxyCommand的/ usr/bin中/ NC -4 -n -X 5 -X 127.0.0.1:55555%H%P
我跑的SSH與ServerAlive選項設置爲1:
> SSH -o ServerAliveInterval = 1 -o ServerAliveCountMax = 1 e3prosup @服務器
然後在另一個會話中,我發現與ssh關聯的'nc'進程並將其殺死。 kill -9(SIGKILL)或kill -13(SIGPIPE)都可以工作。
> PS -efa
e3prosup 19502 10955 0 11時43分/ 6 00:00:00 SSH -o ServerAliveInterval = 1 -o ServerAliveCountMax = 1 e3prosup @服務器
e3prosup 19503 19502 0 11點43分/ 6 00:00:00的/ usr/bin中/ NC -4 -n -X 5 -X 127.0.0.1:55555服務器22
>殺-13 19503
現在SSH會話獲取:
e3prosup @服務器>寫失敗:斷的管
- 1. 破管錯誤?
- 2. 獲取'av_interleaved_write_frame():破管'錯誤
- 3. 錯誤:[Errno 32]破管django
- 4. Django的 - [錯誤32]破管
- 5. grep:破管錯誤python 2.2
- 6. Django的錯誤:[錯誤32]破管
- 7. 如何打破錯誤
- 8. 如何打破框架注入?
- 9. ECC錯誤注入註冊
- 10. 的Python socket.error:[錯誤32]破碎管
- 11. Nginx的tomcat扔破管錯誤
- 12. 鵜鶘使服務錯誤與破管?
- 13. Tensorboard:破管錯誤和空白頁
- 14. 請幫我修復破管錯誤
- 15. 在memcached rails中破管錯誤
- 16. ngMeta注入錯誤
- 17. 錯誤注入com.gwtplatform.dispatch.rest.client.ActionMetadataProvider
- 18. Sql注入錯誤
- 19. Python BaseHTTPServer,我如何捕獲/陷阱「破管」錯誤?
- 20. AngularJS $注入服務注入錯誤
- 21. 的RabbitMQ - PHP AMQP破破的管道錯誤
- 22. IO錯誤:[錯誤32]破碎的管道:Python的
- 23. 裨燒瓶視頻流停止錯誤:[錯誤32]破碎管
- 24. 如何在註釋注入器出現空錯誤時調試注入器?
- 25. JavaScript注入網站破解
- 26. 如何將託管bean注入FacesContext?
- 27. 依賴注入錯誤
- 28. Vuejs注入:一些錯誤
- 29. SQL注入:語法錯誤
- 30. Ninject注入錯誤類型
是的,理論上。在我的代碼中,我嘗試通過close(),exit()甚至「ctrl-C」退出接收器。沒有任何東西會使發件人打印「Broken pipe」錯誤。 – user180574
發送更多。沒人說這是瞬間的。例如,由於TCP緩衝,在破壞之後的第一次發送中不會發生。此外,發件人不一定會打印任何內容,除非它被編程爲在每次發送()錯誤時都這樣做。 – EJP
是的,我發送大量數據並放慢了網絡傳輸過程中終止接收器。謝謝。 – user180574