這裡只描述同步socket的send函式的執行流程
當呼叫該函式時,send先比較待傳送資料的長度len和套接字s的傳送緩衝 的 長度
如果len大於s的傳送緩衝區的長度,該函式返回socket_error
如果len小於或者等於s的傳送緩衝區的長度, 那麼send先檢查協議 是否正在傳送s的傳送緩衝中的資料,如果是就等待協議把資料傳送完 如果協議還沒有開始傳送s的 傳送緩衝中的資料或者s的傳送緩衝中沒有資料,那麼 send就比較s的傳送緩衝區的剩餘空間和len
如果len大於剩餘空間 大小send就一直等待協議把s的傳送緩衝中的資料傳送完
如果len小於剩餘 空間大小send就僅僅把buf中的資料copy到剩 餘空間裡(注意並不是send把s的傳送緩衝中的資料傳到連線的另一端的,而是協議傳的,send僅僅是把buf中的資料copy 到s的傳送緩衝區的剩餘空間裡)
如果send函式copy資料成功,就返回實際copy的位元組數
如果send在copy資料時出現 錯誤,那麼send就返回socket_error
如果send在等待協議傳送資料時網路斷開的話,那麼send函式也返回 socket_error
要注意send函式把buf中的資料成功copy到s的傳送緩衝的剩餘空間裡後它就返回了,但是此時這些資料並不一定馬上被傳 到連線的另一端
如 果協議在後續的傳送過程中出現網路錯誤的話,那麼下乙個socket函式就會返回socket_error。 (每乙個除send外的socket函式在執 行的最開始總要先等待套接字的傳送緩衝中的資料被協議傳送完畢才能繼續
如果在 等待時出現網路錯誤,那麼該socket函式就返回 socket_error)
原作者寫的有點亂 連在一起 看著很憋屈 就轉來整理了一下
同步執行和非同步執行
同步執行模式 所謂同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至 程式結束。如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將 一直等待伺服器將查詢結果返回客戶機端,然後才繼續進行下一步操作。眾所周知,應用程式要從乙個大表中刪除所有的記錄將是非常耗時的,如果應用...
集合的同步執行
using system using system.collections using system.collections.specialized namespace 集合和同步 位址 key,sdic key else stathread static void main string args...
dwr的同步執行
今天重新用了一下dwr框架,但是發現了乙個問題,想了很長時間才明白,如下。var columnstore new array infomanager.getcolumn function data alert columnstore 我就反覆執行alert columnstore 但是一直是空值,後...