tcp連線斷開的時候呼叫closesocket函式,已經討論過有優雅的斷開和強制斷開,那麼如何設定斷開連線的方式呢?是通過設定socket描述符乙個linger結構體屬性。
linger結構體資料結構如下:
struct linger
;有三種組合方式:
第一種l_onoff = 0;
l_linger忽略
這種方式下,就是在closesocket的時候立刻返回,底層會將未傳送完的資料傳送完成後再釋放資源,也就是優雅的退出。
第二種l_onoff非零
l_linger = 0;
這種方式下,在呼叫closesocket的時候同樣會立刻返回,但不會傳送未傳送完成的資料,而是通過乙個rest包強制的關閉socket描述符,也就是強制的退出。
第三種l_onoff非零
l_linger > 0
這種方式下,在呼叫closesocket的時候不會立刻返回,核心會延遲一段時間,這個時間就由l_linger得值來決定。如果超時時間到達之前,傳送完未傳送的資料(包括fin包)並得到另一端的確認,closesocket會返回正確,socket描述符優雅性退出。否則,closesocket會直接返回錯誤值,未傳送資料丟失,socket描述符被強制性退出。需要注意的時,如果socket描述符被設定為非堵塞型,則closesocket會直接返回值。
結構體作為屬性
main.m 結構體作為屬性 created by mac on 16 5 10.import 淺拷貝 淺拷貝只是增加了乙個指標指向已經存在的記憶體。占用的同乙個記憶體 深拷貝 深拷貝是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體,採用深拷貝的情況下,占用的是兩個不同的記憶...
結構體作為物件的屬性
結構體作為物件的屬性 結構體如何開闢儲存空間 結構體分配儲存空間是將所有屬性占用的儲存空間的總和加在一起後再分配 注意 其實結構體分配儲存空間本質上並不是將所有屬性占用的儲存空間的總和加在一起後再分配 而是會獲取結構體型別中占用記憶體最大的屬性的大小,然後取該大小的倍數 特例 如果剩餘的儲存空間 不...
結構體作為物件的屬性
typedefstruct date inte ce student nsobject end 1 結構體只能在定義的時候初始化 系統並不清楚它是陣列還是結構體 2 初始化結構體屬性 方法一 強制轉換 stu birthday date 方法二 定義乙個新的結構體,給d賦值,將d賦值給 birthd...