linux高效能伺服器程式設計(1)

2021-07-02 19:43:10 字數 2261 閱讀 7101

linux網路程式設計基礎api

(1)socket位址api

(2)sockt基礎api

sockt的api全部定義在sys/socket.h檔案中,包括 建立socket, 命名socket,監聽socket,接受連線,發起連線,讀寫資料,獲取位址資訊,檢測帶外標記,以及讀取和設定socket選項。

(3)網路資訊api

實現主機名和ip位址之間的轉換,以及伺服器名稱和埠號之間的轉換。這些api全部定義在netdb.h中。

1、socket位址api

1.1  主機位元組序和網路位元組序

#include

1.2  通用socket位址

#include

struct socketaddr

sa_family_t      sa_family;        //位址族變數。

char                    sa_data[14];   //用於存放socket的值。

位址族和協議族的關係

協議族以及其位址

總結:sa_data根本根本無法容納多數協議族的位址值。因此linux定義了下面新的socket位址結構體

#include

struct  socketaddr_stroge

sa_family_t    sa_family;

using  long int   _ss_align;

char   _ss_padding[128 - sizeof(_ss_align)];  

1.3專用socket位址

1.3.1 unix本地域協議族

#include

strcut socketaddr_un

sa_family_t    sin_family;   //位址族  af_unix

char  sun_path;                   //檔案路徑名

1.3.2 tcp/ip協議族

ipv4位址協議族

struct socket_addr_in

sa_family_t   sin_family;    //位址族af_net

u_int16_t   sin_port;           //埠號,要用網路位元組序表示

struct in_addr  sin_addr;  // ipv4位址節結構體

struct  in_addr

u_int32_t   s_addr;            //要用網路位元組序表示

ipv6位址協議族

struct socket_addr_in6

sa_family_t   sin6_family;    //位址族af_net6

u_int16_t   sin_port;           //埠號,要用網路位元組序表示

u_int32_t   sin6_flowinfo;  //留資訊,應設定為0

struct in6_addr  sin6_addr;  // ipv6位址節結構體

u_int32_t    sini6_scope_id;//scope_id  尚處於試驗階段

struct  in6_addr

unsigned  char  sa_addr[16];            //ipv6,要用網路位元組序表示

1.4  ip位址轉換函式

#include

in_addr_t   inet_addr(const char * strptr);                   //將點分十進位制的ipv4位址轉換為網路位元組序表示的ipv4位址

int   inet_aton(const char* cp, struct in_addr *inp);   //同上,輸出引數inp為轉換後的ipv4位址

char * inet_ntoa(struct  in_addr in);                              //不可重入,該函式內部使用靜態變數儲存結果。將網路位元組序的ipv4位址轉為點分十進位制的字串。

ipv6的轉換函式(同樣適用與ipv4)

#include

int  inet_pton(int af, const char *src, void*  dst);                                     //af是協議族型別,將點分十進位制的ipv6(ipv4)位址轉換為網路位元組序表示的ipv6(ipv4)位址

const char* inet_ntop(int af, void *src, const char* dst, socklen_t  cnt);

Linux高效能伺服器程式設計筆記1

要學習socket位址先要理解主機位元組序和網路位元組序。什麼是主機位元組序和網路位元組序?學習之前了解大小端位元組序 以整數 int i 1 為例 大端位元組序 記憶體的高位址存乙個數的低位位元組 0 7bit 記憶體的低位址存這個數的高位位元組 23 31bit 小端位元組序 記憶體的高位址存乙...

linux高效能伺服器程式設計

linux高效能伺服器程式設計 當當網 亞馬遜 目錄 第一章 tcp ip協議族 第二章 ip協議族 第三章 tcp協議詳解 第四章 tcp ip通訊案例 訪問internet 第五章 linux網路程式設計基礎api 第六章 高階io函式 第七章 linux伺服器程式規範 第八章 高效能伺服器框架...

linux 高效能伺服器程式設計

1.高效能定時器 時間輪,時間堆 處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件 2.高效能伺服器程式框架 nginx 使用的是基於事件模型,epoll,不阻塞,非同步處理 兩種高效的事件處理模式 reactor模式 proactor模式 兩種高效的併發模式 半同步 半非同步模式 領導者...