Linux Socket套接字描述符詳解

2022-03-30 22:13:20 字數 1220 閱讀 7208

套接字又名socket,是乙個介面,程序可以利用該介面和其他程序通訊。無論是其他程序在本機上還是在其他機器上。

套接字介面有許多不同的網路協議。包括tcp/ip協議棧!

就如使用檔案描述符來訪問檔案一樣。

程式是用套接字描述符來訪問套接字。

#include

int socket(int domain,int type,int protocol) 接下來來詳細介紹這三個引數

1.domain

就如寫信一樣,不同國家寫信的位址寫法不同,英國美國有從街-區-市的從小到大的位址寫法!而中國的位址寫法

是從大到小,市-區-街。就如不同域有著不同位址表示格式。

常見的域是:af_inet(ipv4域),af_inet6(ipv6域),af_unix,af_upspec...

2.type

有sock_dgram 固定長度的 無連線的 不可靠的報文傳遞。兩個程序不需要建立連線只需要向對方程序套接字傳送乙個報文。

(有點像寫信,你傳送資訊就代表你寫了很多信件。每封都有位址,接收人。)

有sock_stream 可靠的,有序的,雙向的連線型位元組流。

(有點像,你建了一條管道到別人家,建好以後你不用去送信,只需不斷往管道裡投字條。對方也可以往管道裡投紙條到你家。)

有sock_seqpacket

(和sock_stream 類似只是從套接字得到的不是位元組流而是基於報文的服務。)

有sock_ram

(用於訪問下面的網路層即ip層。構造自己的協議頭部。)

3.protocol

這個引數通常是0,在前2個引數已經確認的情況下一般用來選擇預設的協議。比如在af_inet sock_stream的情況下預設選擇tcp

在af_inet sock_dgream 的情況下預設選擇udp!

就像乙個檔案描述符一樣。可以用read函式 write函式對檔案描述符進行操作。同理可以對套接字描述符進行操作。

但是並不是所有的檔案描述符操作都適用於套接字描述符。最常用的對套接字描述符的操作是shutdown

#include

int shutdown(int sockfd,int how)

如果how是shut_rd 表示關閉讀端無法再從套接字裡讀取

如果how是shut_wr 表示關閉寫段無法再往套接字裡寫

how是shut_rdwr 說明同時無法寫和讀!

可以關閉乙個方向開啟另乙個方向,比如關閉了寫端但是還可以繼續讀取!

Linux socket套接字介面 TCP

tcp協議特性 面向連線,可靠傳輸,面向位元組流。服務端 建立套接字 在核心中建立socket結構體與網絡卡建立聯絡,描述協議版本,傳輸型別,協議型別。為套接字繫結位址資訊 給socket描述源端位址資訊。開始監聽 告訴作業系統可以開始接收客戶端的連線請求 客戶端與服務端進行tcp通訊必須首先建立 ...

Linux socket 檔案系統套接字

套接字 socket 什麼是套接字 套接字是一種通訊機制 通過套接字,可實現本機內的通訊 也可以實現跨網路的通訊。使用套接字實現本地通訊 本機內的伺服器和客戶端 例項 server1.c client1.c 檔案系統套接字伺服器客戶端開發步驟 檔案系統套接字,用於本機內通訊 1 伺服器端 1 刪除以...

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...