linux 高性能讀書筆記之通用socket地址

####socket網絡編程接口
socket的地址是結構體sockaddr
代碼如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
}
sa_family 成員是地址族類型(sa_family_t)變量。
地址族類型通常與協議族類型對應
1.二者對應表

協議族地址表描述
PF_UNIXAF_UNIXUNIX本地域協議族
PF_INETAF_INETTCP/IPv4協議族
PF_INET6AF_INET6TCP/IPv6協議族

二者定義在bits/socket.h頭文件,值一樣,所以二者經常混用

sa_data成員用于存放socket地址值
但是不同的協議族的地址值具有不同的含義和長度

2.協議族及其地址值
協議族地址值含義和長度
PF_UNIX文件的路徑名,長度可達108字節
協議族地址值含義和長度
PF_INET16bit 端口號和32bit IPv4地址
PF_UNIX文件的路徑名,長度可達108字節
PF_INET616bit 端口號,32bit流標識,128bitIPv6地址,32bit范圍ID,共26字節

問題:14字節的sa_data無法容納多數協議族的地址值,因此linux定義了新的通用socket地址結構體
struct sockaddr_storage{

    sa_family_t sa_familyunsigned long int __sa_align;char __ss_padding[128-sizeof(__ss_align)];

}

ssalign:用于內存對齊

3.專用socket地址
問題: 上述通用結構體很不好用,設置與獲取IP地址和端口號需要執行繁瑣的位操作。
解決:linux為各個協議族提供了專門的socket地址結構體
3.1
UNIX本地域協議族:
struct sockaddr_un{
sa_family_t sin_family; //地址族AF_UNIX
char sun_path[108]; // 文件路徑名

    }TCP/IP協議族有了兩個專用struct socketaddr_in{sa_family_t sin_family; //地址族AF_INETu_int16_t sin_port;    //端口號,要用網絡字節序表示struct in_addr  sin_addr;    //Ipv4地址結構體}struct in_addr{u_int32_t   s_addr;//IPv4地址,要用網絡字節序表示}struct socketaddr_in6{sa_family_t sin6_family; //地址族AF_INETu_int16_t sin6_port;    //端口號,要用網絡字節序表示u_int32_t sin6_flowinfo;    //流信息,設置為0struct in6_addr  sin6_addr;    //Ipv6地址結構體u_int32_t sin6_scope_id;     //scope_id實驗用}struct in6_addr{unsigned  char sa_addr[16];//IPv6地址,要用網絡字節序表示}使用說明:所有專用地址類型的變量在實際使用中都需要轉化為通用socket地址類型sockaddr(強制轉換)原因:所有的socket變成接口使用的地址參數的類型為sockaddr4.IP地址轉換函數IPv4:點分十進制字符串IPv6:16進制字符串in_addr_t inet_addr  (const  char * strptr);int  inet_aton(const   char * cp,  struct  in_addr  *  inp);char *  inet_ntoa(struct  in_addr  in);
本文轉自 jackdongting 51CTO博客,原文鏈接:http://blog.51cto.com/10725691/2067439

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540272.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] JAVA面向對象之代碼塊 繼承 方法的重寫 super關鍵字與重寫toString()方法介紹

參考鏈接: 可以重寫Java中的私有方法嗎 JAVA面向對象之代碼塊與繼承 代碼塊分類 局部代碼塊 作用:限制變量生命周期 書寫位置:在方法中 構造代碼塊 開發中很少使用 書寫位置:類中 方法外 調用時機:如果你有構造代碼塊 系統會幫你調用 幫你在創建對象…

struts2中s:select標簽的使用

轉自&#xff1a;https://www.cnblogs.com/Sara-shi/archive/2013/03/13/struts2_select.html 1 靜態生成 <s:select name"user.sex" list"#{0:男,1:女}" label"性別" headerKey"" headerValue"請選擇性別"></s:se…

[轉載] JAVA面試題大全(part_1)

參考鏈接&#xff1a; 對Java中派生類方法更嚴格的訪問 JAVA面試題大全(part_1) 1、面向對象的特征有哪些方面 (1)抽象&#xff1a; 抽象就是忽略一個主題中與當前目標無關的那些方面&#xff0c;以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題&#xf…

使用mysqladmin命令修改MySQL密碼與忘記密碼

修改密碼&#xff1a; 1.例如你的 root用戶現在沒有密碼&#xff0c;你希望的密碼修改為123456&#xff0c;那么命令是&#xff1a; mysqladmin -u root password 123456 2.如果你的root現在有密碼了&#xff08;123456&#xff09;&#xff0c;那么修改密碼為abcdef的命令是&a…

[轉載] java面試100問+參考答案

參考鏈接&#xff1a; 對Java中派生類方法更嚴格的訪問 1、面向對象的特征有哪些方面 (1).抽象&#xff1a; 抽象就是忽略一個主題中與當前目標無關的那些方面&#xff0c;以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題&#xff0c;而只是選擇其中的…

工作所用的模塊回滾腳本

俗話說的好&#xff1a;“真男人從來不回滾”&#xff0c;但是家中常備一個回滾腳本也是很有必要的&#xff0c;我所在公司的服務器模塊名都是在初始化的時候寫進/etc/role_install這個文件里&#xff0c;如下圖的這個服務器就是fss服務器&#xff1a; 再比如下面這個服務器&am…

Linux服務器性能評估與優化

一、影響Linux服務器性能的因素 1. 操作系統級 CPU 內存 磁盤I/O帶寬 網絡I/O帶寬 2. 程序應用級 二、系統性能評估標準影響性能因素評判標準好壞糟糕CPUuser% sys%< 70%user% sys% 85%user% sys% >90%內存Swap In&#xff08;si&…

[轉載] Java序列化的幾種方式以及序列化的作用

參考鏈接&#xff1a; Java中帶有繼承的對象序列化 文章轉載自&#xff1a; 本文著重講解一下Java序列化的相關內容。 如果對Java序列化感興趣的同學可以研究一下。 一.Java序列化的作用 有的時候我們想要把一個Java對象變成字節流的形式傳出去&#xff0c;有的時候我們…

nginx 非80、443端口跳轉到80、443

其實很簡單: 123if ($server_port ! 80 ) { rewrite ^/(.*)$ http://$host/$1 permanent; }舉一反三。。。 123if ($server_port ! 443 ) { rewrite ^/(.*)$ https://$host/$1 permanent; }123if ($host ! host ) { rewrite ^/(.*)$ http://host/$1 permanent; }本文轉自 ninny…

[轉載] 一文徹底搞懂父類引用指向子類對象問題

參考鏈接&#xff1a; 用子類引用子類對象 vs 父類引用 public class Father { private String name; private int age; private int weight; public void eat() { System.out.println("Father is eating"); } private void run() { System.out.println("Runin…

把控站外seo效果的幾個操作點

把控站外seo效果的幾個操作點 實際上&#xff0c;站外的seo不僅僅是外鏈這么簡單&#xff0c;還包括用戶行為&#xff08;點擊&#xff09;&#xff0c;品牌詞曝光等工作。大部分情況下&#xff0c;我們所說的站外優化就是發外鏈。本文就外鏈相關事宜&#xff0c;講解些許操作點…

[轉載] 【C語言】fopen C4996錯誤解決

參考鏈接&#xff1a; C和C#重載可以與繼承一起使用嗎 C4996 fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 解決方案&#xff1a;添加宏定…

Quartus II 8.1 詳解--有圖---圖片詳解 【1講】

Quartus II 8.1 詳解--有圖---圖片詳解 看圖片比較清楚&#xff0c;比文章清楚的多 本文轉自 zhangguangyi 51CTO博客&#xff0c;原文鏈接http://blog.51cto.com/bosszhang/808019:

[轉載] JAVA數組實現學生成績統計

參考鏈接&#xff1a; Java程序的輸出 20(繼承) 一、項目名稱 數組實現學生成績統計 二、項目描述 1.項目簡介&#xff1a; 由用戶輸入學生人數與名字&#xff0c;并定義當前學期課程數與課程名&#xff0c;并分別錄入每位學生每門課程成績&#xff0c;系統顯示輸入每位學生每…

建立同步文件的腳本

為避免一個一個的去修改每一個服務器的配置文件&#xff0c;只需要rsync同步一下就可以搞定#!/bin/bash#rsync.shLOCAL_DIR"/opt/admin"test -n "$hosts" || hosts"xxxx xxxx"REMOTE_DIR"/opt/"RSYNC_LOG"/opt/var/log/rsync.log…

[轉載] Java三元運算符示例

參考鏈接&#xff1a; Java中的運算符 本示例說明如何編寫Java三元運算符。 這是語法 condition ? get_this_if_true : get_this_if_false Java三元運算符語法 (n > 18) ? true : false; (n true) ? 1 : 0; (n null) ? n.getValue() : 0; 1. Java三元運算符 …

shell下的進度條和最大最小平均值

進度條 C語言下的進度條參考我原來的一篇blog->進度條 1234567891011121314151617181920212223function proc() {i0 str arr(| / - \\) index0 while [ $i -le 100 ] do printf "[%-101s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}&qu…

[轉載] 你真的會用 Java 中的三目運算符嗎

參考鏈接&#xff1a; Java中的按位運算符 轉載:http://blog.jobbole.com/93511/ 寫在前面&#xff1a; 三目運算符是我們經常在代碼中使用的&#xff0c;a (bnull?0:1); 這樣一行代碼可以代替一個 if-else&#xff0c;可以使代碼變得清爽易讀。但是&#xff0c;三目運算符也…

HTTP Keep-Alive模式

1、什么是Keep-Alive模式&#xff1f; 我們知道HTTP協議采用“請求-應答”模式&#xff0c;當使用普通模式&#xff0c;即非KeepAlive模式時&#xff0c;每個請求/應答客戶和服務器都要新建一個連接&#xff0c;完成 之后立即斷開連接&#xff08;HTTP協議為無連接的協議&#…

[轉載] java:比較運算符

參考鏈接&#xff1a; Java中的new運算符 1.compareTo()方法: compareTo()方法返回的是一個int類型值. //聲明的值 BigDecimal t_sell1 new BigDecimal(); BigDecimal t_sell2 new BigDecimal(); if(t_sell1.compareTo(t_sell2)0){ return "t_sell1的值等于t_sell2&…