linux socket編程相關知識的總結

來源:互聯網
上載者:User

1:socket編程中採用的協議族主要有兩種

   1>:網路通訊協定族(形式如:AF_INET, PF_INET等)

   2>:本地unix域格式的協議族(形式如:AF_LOCAL, AF_UNIX等)

   註:協議族的選擇體現在  int  socket(int domain, inst type, int protocol)函數的第一個參數處。

2:這兩種協議族的區別:

   1>:本地unix域格式的協議族,只能用於本機(即,用戶端和伺服器端在同一台機器);而網路通訊協定族

   不僅可以用於本機也可以跨網路

   2>:本機上的用戶端和服務端之間的通訊採用本地unix域格式的協議族要比採用網路通訊協定族的速度快

   3>:本地unix域格式的協議族用的也比較廣泛,如一些伺服器的模組間的通訊(mysql), 再比如管道等。

3:socket通訊的幾個關鍵的函數

   1>:send函數,原型,  int send(SOCKET s,  const char FAR *buf , int len,  inf flags)。該函數的詳細介紹:

   參數s,通訊端描述符; 參數buf,存放發送資料的緩衝區; 參數len, 發送資料的長度;  參數flags,標誌,一般為0;

   該函數的執行流程(同步socket
):

   (1):首先比較len與通訊端s的發送緩衝區長度的大小(len1),如果len大於len1,那麼該函數立即返回SOCKET_ERROR

   (2):如果len < len1, 然後send檢查協議是否是在發送s的發送緩衝區裡的資料,如果是就等待協議將資料發送完,如果協議還沒有開始發送s的發送緩衝區裡的資料或者s的發送緩衝區是空的,那麼send就比較s的發送緩衝區的剩餘空間(len2)和len的大小

   (3):如果len > len2, 那麼send就一值等待協議將s的發送緩衝區中的資料發送完

   (4):如果len < len2, 那麼就將待發送的資料copy到s的發送緩衝區裡

   註:send函數只是將待發送的資料copy到通訊端s的發送緩衝區裡面,而負責將資料傳送到通訊的另一端的是協議

   (5):send函數的返回情況:如果len > len1 直接返回SOCKET_ERROR;  send將資料傳送到通訊端s的發送緩衝區裡,而協議在傳送資料時,出現網路故障,也返回SOCKET_ERROR

   2>:recv函數(同步socket)
,原型,  int recv(SOCKET s, char FAR *buf,  int len,  int fags)

   (1):參數說明, buf,表示接受資料的緩衝區,其餘的相同

   (2):該函數的執行過程,recv先等待通訊端s的發送緩衝區的資料被協議傳送完畢,如果協議在傳送s的發送緩衝區裡資料時,出現網路

   網路故障,那麼recv函數將返回SOCKET_ERROR。如果s的發送緩衝區中沒有資料或者被協議成功傳送,然後,recv檢查s的接收緩衝區,如果接收緩衝區中沒有資料或者協議正在接收資料,那麼recv函數將一直等待,直到協議將資料接收完畢。如果協議接收資料完畢,那麼recv函數就會將s的接受緩衝區中的資料copy到buf中

   註:協議接收到的資料可能大於buf的長度,所以在這種情況下要調用幾次recv函數才能把s的接受緩衝區中的資料copy完。真正接受資料的是協議。

  註:send與協議是有關聯的,如果協議在傳送資料時出現網路故障,那麼send函數將返回SOCKET_ERROR,而recv與協議是沒有關聯的(個人理解層面)

   3>:設定s的發送和接受緩衝區大小的函數    setsocketopt函數,詳細資料,待用時online

   4>:關閉通訊端描述符s的函數有兩個close()和shutdown(),區別如下:

      len1    int s;  // existing socket


      len2    int d;

      len3    d = dup(s);

      len4    close(s);   //nothing happens yet


      len5    close(d);  //last close, so shudown socket

      註:close關閉s之後,不會起任何作用(因為還有一個通訊端描述符指向該通訊端),只有close關閉d之後,才會起作用。


      但是:shutdown()函數會立即關閉掉該通訊端。


    5>:




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.