1. 程式人生 > >socket有沒有同步寫一說(怎麽判定數據一定達到了對端?還得用戶態)

socket有沒有同步寫一說(怎麽判定數據一定達到了對端?還得用戶態)

寫到 協議 語義 文件系統 數據 數據包 非阻塞 事情 -s

網絡上的同步寫和異步寫和磁盤的同步和異步不一樣

網絡上的同步寫是寫到tcp的緩沖區中,如果緩沖區沒有地方了,那麽是直接返回給用戶態程序還是讓用戶程序卡住,這個是阻塞和非阻塞發生的地方。

註意:阻塞是指tcp緩沖區中是否有數,然後在機器不重啟的情況下,tcp協議會保證你的數據到達對端!!!!也就是tcp協議是一種同步的協議!tcp協議就是文件系統中的“同步寫”,他會有各種各樣的機制來保證數據一定會達到對端!當然了這一路可能發生各種各樣的事情!比如我發送端機器異常重啟了,比如對端機器down機了,比如中間路由器掛掉了,所以在網絡傳輸中,是怎麽判斷數據到沒到對端?

有沒有一種語義,我這條數據一定達到了對端

?只能通過用戶態來保證了,比如收到了數據之後,返回一條確認數據,然後對端接收,返回一個確認收到的數據包,只有用戶態才能做這件事情。

用戶態怎麽判定數據一定達到了對端?

tcp鏈接我們知道數據一定是對到達對端的,但是這些超時重傳啊什麽的,都是內核態的行為,用戶態怎麽知道數據發送到沒有。

這就是tcp的同步,那麽放到了tcp的緩沖區之後,到底是誰發送出去的呢?是當前線程還是別的線程捏?【一切與文件系統對標,哈哈哈哈哈】

阻塞!

socket有沒有同步寫一說(怎麽判定數據一定達到了對端?還得用戶態)