有沒有任何方法檢查使用winsock的send()或WSASend()發送的數據是否確實傳送到目的地?確保發送()數據已發送
我正在寫一個應用程序與第三方服務器交談,這個服務器在工作一段時間後有時會關閉,並且需要確定發送到該服務器的消息是否已發送。問題是有時候調用send()完成沒有錯誤,即使服務器已經關閉,只有下一個send()完成時出現錯誤 - 所以我不知道以前的消息是否已經傳遞。我想在TCP層有信息,如果某些(或所有)發送的數據包是acked或不是,但它不是使用套接字接口(或我找不到方法)。
最糟糕的是,我無法更改服務器的代碼,所以我無法獲得任何傳送確認消息。
TCP協議有瑕疵,所以TCP層完全知道對方是否收到已發送消息的一部分 - 是否有任何獲取此信息的選項?我知道通過其他TCP堆棧來完成消息並不意味着讀取它並按應用程序進行處理,但我可以假設它足夠接近。作爲第三方服務器,我無法修改應用程序協議。 – miara 2011-01-27 07:04:05
該信息不會傳播回API,正如您所說的那樣,並不意味着服務器將其從*它的緩衝區中讀出並處理。 – CoreyStup 2011-01-27 13:36:26