簡體   English   中英

UDP async_receive的boost :: asio錯誤

[英]boost::asio error for UDP async_receive

我遇到了一個來自boost :: asio的奇怪錯誤的問題。 我正在實現一半的TFTP服務器(僅限服務器 - >客戶端)。 我在第一個套接字上的端口69上獲得第一個RRQ數據包,然后創建另一個套接字以執行DATA,ACK交換。 我在該套接字上啟動async_receive(),然后對第一個數據包執行send()。 然后我得到接收的處理程序回調(我假設ACK進來)並且它給出錯誤“沒有連接可以因為目標機器主動拒絕它”我從另一個線程理解這里意味着ERROR_PORT_UNREACHABLE。

我真的不明白接聽電話如何導致無法解決的錯誤,因為我沒有接觸任何東西,我收到了。 我檢查了send()的結果,那里沒有錯誤。

我檢查了套接字中的本地和遠程端點(錯誤之前和之后),並且它們具有正確的IP地址和端口。

有任何想法嗎? 我已經google了,找不到其他人有這個問題。 大多數結果導致我進行stackoverflow,所以我在這里問。

編輯 - 我的問題是我正在使用調試器。 當我開始發送第一個數據包時,在客戶端在大約一秒鍾內發送了十幾個請求之后,客戶端超時並放棄了我的數據為時已晚。 當我沒有斷點運行時它工作正常。 感謝大家的建議。 正在看Wireshark的數據包給了我線索。

發送成功的原因是發送只是表明已將數據包提供給操作系統。 特別是,操作系統然后將該數據包發送到目的地,並以一個IP數據包響應,指示主機沒有收聽。 然后,您的操作系統會收到它,並在您的套接字上設置一個標志,導致下一次讀取失敗。 由於您已經在執行異步接收,因此會導致接收返回錯誤。

如果可能的話,我強烈建議使用wireshark或類似的東西觀看UDP交換,看看是否可以識別任何其他問題。 我不熟悉TFTP協議,並且不能在那里提供太多輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM