Unix網路程式設計思想

2021-08-08 16:39:43 字數 1251 閱讀 5009

本次部落格主要總結參考《unix網路程式設計》卷一前四章的知識,對tcp一對一通訊進行重新改造和分析,經典就是經典,無可替代!

一、為什麼使用包裹函式
listenfd =socket(af_inet, sock_stream, 0);
包裹函式socket定義為:

int socket(int family, int

type, int

protocol)

因此,在unp課程後面的所有例子中,我們建議使用包裹函式的形式,不僅縮短了**,有利於開發者看清楚具體的功能實現;而且考慮了對於每一步的出錯資訊及處理,使**更具有健壯性。

二、unix errno值

只要乙個unix函式(例如某個套接字函式)中有錯誤發生,全域性變數errno就被置為乙個指明該錯誤型別的正值,函式本身則通常返回-1。

errno的值是只在函式發生錯誤時設定。如果函式不返回錯誤,errno的值就沒有定義。errno的所有正數錯誤值都是常值,具有以「e」開頭的全大寫字母名字,並通常在標頭檔案sys/errno.h定義。值0不表示任何錯誤。

在全域性變數中存放errno值對於共享所有全域性變數的多個執行緒並不適合。

三、tcp通訊流程

基於tcp(面向連線)的socket程式設計,分為伺服器端和客戶端

伺服器端的流程如下:

(1)建立套接字(socket)

(2)將套接字繫結到乙個本地位址和埠上(bind)

(3)將套接字設為監聽模式,準備接收客戶端請求(listen)

(4)等待客戶請求到來;當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept)

(5)用返回的套接字和客戶端進行通訊(send/recv 、write/read)

(6)返回,等待另乙個客戶請求。

(7)關閉套接字。

客戶端的流程如下:

(1)建立套接字(socket)

(2)向伺服器發出連線請求(connect)

(3)和伺服器端進行通訊(send/recv 、write/read)

(4)關閉套接字

UNIX網路程式設計

在unix network programming 的 3.7 inet pton and inet ntop functions 中提到中有如下兩個巨集定義 define inet addrstrlen 16 for ipv4 dotted decimal define inet6 addrstr...

unix網路程式設計

任何tcp的實現都需要為msl選擇乙個合適的值,rfc的建議值是2分鐘。分組可能出現迷途,若迷途分組在msl中找到路,造成重複,tcp必須修復 time wait存在的理由 可靠的實現全雙工的連線和終止 考慮最終ack丟失的情況,允許老的重複分組在網路中消逝 tcp的化生身現象,因為time wai...

unix 網路程式設計 UDP

udp user datagram protocol 程式傳送資料給 udp socket,資料先被封裝成 udp資料報,然後又被封裝成ip資料報,然後被傳送到目標方。資料是否被正確傳輸無任何保證 是否到達目標方,是否按正確順序到達,是否目標方只收到乙份資料 每個udp資料報都有長度,這個長度包含在...