之前用的方法不夠優雅是因為,我們是呼叫close或closesocket函式單方面斷開連線。
1.解釋tcp中「流」的概念。udp中能否形成流?請說明原因。
答:兩台主機通過套接字建立連線後進入可交換資料的狀態,又稱「流形成的狀態」。也就是把建立套接字後可交換資料的狀態看作是一種流,此處的流可以比作水流,水朝著乙個方向流動,同樣,在套接字的流中,資料也只能向乙個方向移動,因此,為了進行雙向通訊,需要2個流。
2.udp中能否形成流?請說明原因。
答:udp不能形成流, sock_dgram 表明資料將是資料報(datagrams)的形式。
3.linux中的close函式或windows中的closesocket函式屬於單方面斷開連線的方法,有可能帶來一些問題。什麼是單方面斷開連線,什麼情況下會出現問題?
答:close函式斷開連線意味著完全斷開連線,完全斷開不僅指無法傳輸資料,而且不能接受資料。比如主機a傳送完最後的資料後,呼叫close函式斷開了連線,之後主機a無法再接受主機b傳輸的資料。實際上,是完全無法呼叫與接收資料相關的函式,最終,由主機b傳輸的,主機a必須接收的資料也就銷毀了。
4.什麼是半關閉?針對輸出流執行半關閉的主機處於何種狀態?半關閉會導致對方主機接受什麼訊息?
答:半關閉函式:int shutdown(int sockfd,int howto)
sockfd:需要斷開的套接字檔案描述符
howto:傳遞斷開方式資訊
第二個引數:shut_rd:斷開輸入流,shut_wr:斷開輸出流,shut_rdwr:同時斷開i/o流。
優雅地斷開套接字連線 套接字半關閉
呼叫close函式斷開連線,意味著完全斷開連線,不僅無法傳輸資料,而且也不能接收資料。兩台主機通過套接字建立連線後進入可交換資料的狀態。把建立套接字後可交換資料的狀態看作一種流。為了實現雙向通訊,套接字生成的兩個流。shutdown函式關閉其中乙個流。呼叫上述函式時,第二個引數決定斷開連線的方式 s...
7 1 優雅斷開套接字
1.使用close,closesocket函式是單方面斷開連線,不夠優雅。呼叫了close意味著完全斷開連線,不能傳送也不能接收資料。圖中,a傳送完資料後斷開連線,之後主機再也不發接收b的資料,如此不夠優雅。2.使用shutdown可以關閉其中的乙個流。include int shutdown in...
網路程式設計學習筆記(七)優雅的斷開套接字連線
tcp中的斷開連線過程更重要,因為連線過程中一般不會出現大的變數,但斷開過程有可能發生意想不到的情況,因此應準確掌控。只有明白了下面講的半關閉 half close 才能明確斷開過程。linux的close函式和windows的closesocket函式意味著完全斷開連線。完全斷開不僅指無法傳輸資料...