《網路程式設計》 第7章 優雅地斷開套接字連線

2021-10-10 16:31:31 字數 1224 閱讀 5826

思想:

​ 只關閉一部分資料交換中使用的流 ( half-close )。斷開一部分連線是指,可以傳輸資料但無法接收,或可以接收資料但無法傳輸。顧名思義就是只關閉流的一半。

#include

int shutdown( int sock, int howto );

功能:​ 關閉一部分資料交換中使用的流。

引數:​ sock:需要斷開的套接字檔案描述符。

​ howto:傳遞斷開方式資訊。

​ shut_rd:斷開輸入流;(套接字無法接受資料)

​ shut_wd:斷開輸出流;(套接字無法傳送資料)

​ shut_rdwd:同時斷開i/o流。(相當於同時呼叫shut_rd, shut_wd)

返回值:

成功返回0, 失敗返回-1。

open() 是linux系統自帶函式呼叫 返回的是檔案控制代碼,檔案的控制代碼是檔案在檔案描述副表裡的索引;

fopen()是c的庫函式,返回的是乙個指向檔案結構的指標。

fopen()不能指定要建立檔案的許可權;open()可以指定許可權.

fopen()返回指標,open()返回檔案描述符(整數)

​ 檔案描述符是linux下的乙個概念,linux下的一切裝置都是以檔案的形式操作。如網路套接字、硬體裝置等。當然包括操作檔案。fopen()是標準c函式。返回檔案流而不是linux下檔案控制代碼。裝置檔案不可以當成流式檔案來用,只能用open()。

fread() 帶有緩衝,是read() 的衍生

fread() 可以讀乙個結構。read() 在linux/unix中讀二進位制與普通檔案沒有區別。

1) 解釋tcp中「流」的概念。udp中能否形成流?請說明原因?

tcp的流指,兩台主機通過套接字建立連線後進入可交換資料的狀態,也稱為「流形成的狀態」。而對於udp來說,不存在流,因為兩個socket不能相互連線

2) linux中的close函式或windows中的closesocket函式屬於單方面斷開連線的方法,有可能帶來一些問題。什麼是單方面斷開連線?什麼情況下會出現問題?

單方面的斷開連線意味著套接字無法再傳送資料。一般在對方有剩餘資料為傳送完成時,斷開己方連線,會造成問題。

3) 什麼是半關閉?針對輸出流執行半關閉的主機處於何種狀態?半關閉會導致對方主機接收什麼資訊?

半關閉是指只完成輸入和輸出流中的乙個。而且,如果對輸出流進行半關閉,eof無法被傳送到對方主機,己方套接字無法傳送資料,但可以接收對方主機傳送的資料。

**入口

優雅地斷開套接字連線 套接字半關閉

呼叫close函式斷開連線,意味著完全斷開連線,不僅無法傳輸資料,而且也不能接收資料。兩台主機通過套接字建立連線後進入可交換資料的狀態。把建立套接字後可交換資料的狀態看作一種流。為了實現雙向通訊,套接字生成的兩個流。shutdown函式關閉其中乙個流。呼叫上述函式時,第二個引數決定斷開連線的方式 s...

網路程式設計學習筆記(七)優雅的斷開套接字連線

tcp中的斷開連線過程更重要,因為連線過程中一般不會出現大的變數,但斷開過程有可能發生意想不到的情況,因此應準確掌控。只有明白了下面講的半關閉 half close 才能明確斷開過程。linux的close函式和windows的closesocket函式意味著完全斷開連線。完全斷開不僅指無法傳輸資料...

第17章 套接字程式設計

1.使用tcp從伺服器獲取資料 end.2.乙個簡單的tcp伺服器 socket server.erl module socket server export start nano server 0,loop 1,nano client eval 1 start nano server gen tc...