關於socket 關閉的問題

2021-05-24 12:06:37 字數 748 閱讀 9430

tcp連線斷開的時候呼叫closesocket函式,已經討論過有優雅的斷開和強制斷開,那麼如何設定斷開連線的方式呢?是通過設定socket描述符乙個linger結構體屬性。

linger結構體資料結構如下:

struct linger

int l_onoff;

int l_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會直接返回值。

關於tcp的退出暫時了解這些,遇到問題再具體分析解決。

關於ResultSet的關閉問題

在connection上呼叫close方法會關閉statement和resultset嗎?級聯的關閉這聽起來好像很有道理,而且在很多地方這樣做也是正確的,通常這樣寫 connection con getconnection getconnection is your method prepareds...

優雅的關閉socket

我們在利用iocp 完成埠 進行程式設計的時候,經常要關閉一些不滿足條件的套接字。假如我們直接採用closesocket方法進行關閉的話,繫結到io埠的此套接字的未傳送的資料就會丟失,這種情況是我們不願意發生的。下面介紹一種合理關閉此套接字的方法 首先,利用setsockopt msdn 函式設定套...

關於socket鏈結錯誤問題

用socket做乙個簡單的windows程式,先拿來了以前在vc6.0上做的一小段 竟然發現在vs2008上不能執行.出現了好多鏈結錯誤,研究了好半天也沒有發現是怎麼回事.下來是 和 錯誤資訊.正在鏈結 1 tem.obj error lnk2019 無法解析的外部符號 imp closesocke...