套接字結構

套接字編程簡介

最近在看《UNIX網絡編程卷一》,算是寫的讀書筆記吧.

IPv4套接字地址結構

IPv4套接字地址結構定義在 < netinet/in.h > 頭文件中.它以 sockaddr_in 命名.下面是它的結構體:

struct in_addr {in_addr_t       s_addr;             32位IPv4地址,網絡字節序
};struct sockaddr_in {uint8_t         sin_len;sa_family_t     sin_family;         協議類型in_port_t       sin_port;           端口號struct in_addr  sin_addr;           char            sin_zero[8];
}
  • 結構體中的sin_len通常是不用設置的,它存在的目的是為了簡化長度可變套接字地址結構的處理.
  • sin_zero[8]總是被設置為0.按照慣例,整個結構體都會被初始化為0,所以這個未曾使用的數組一般不用特意去管它.
  • 在結構體in_addr中的in_addr_t類型一般為 uint32_t ,而 in_port_t 通常為 uint16_t .

值-結果參數

本來這一部分的內容不多,但是我覺得這是一個很好的解決小問題的思路.于是單拿出來寫一寫.

當往一個套接字函數傳遞套接字地址結構的時候,結構總是以引用(也就是指針)的形式來傳遞,同時參數中還會指明該結構體的
長度.但是長度的傳遞方式則取決于傳遞的方向:從進程到內核或者從內核到進程.

  • 當長度是從進程傳遞到內核的時候,參數是結構體的整數大小,從而使內核知道到底要從進程復制多少數據,從哪復制數據進來.

  • 從內核到進程傳遞套接字地址結構的時候,參數則是指向結構體大小的指針.當函數被調用的時候,它的作用是告訴內核結構體的長度,
    以免內核在寫結構體時越界.當函數返回的時候,結構大小的指針又是一個結果,它告訴進程,內核在該結構體中究竟存儲了多少信息.

  • 這種類型的參數成為 值-結果參數.這個參數在被調用時和返回時代表著兩個不同的含義.

字節操縱函數

Berkeley函數由于兼容性的問題早已經不推薦使用了,所以我也就不再介紹了.

    void *memset (void *dest,int c,size_t len);void *memcpy (void *dest,const void *src,size_t nbytes);int memcmp(const void *ptr1,const void *ptr2,size_t nbytes);

函數名寫的比較明確,這三個函數分別是memory set,memory copy以及memory compare.所以就不詳細講了.

    int inet_aton(const char *strptr,struct in_addr *addrptr);in_addr_t inet_addr(const char *strptr);char *inet_ntoa(struct in_addr inaddr);
  • inet_aton : 將字符串轉換為in_addr并存入我們傳入的in_addr參數.
  • inet_addr : 將字符串轉化為in_addr_t(也就是in_addr結構體中的內容類型),并將其返回.
    • inet_ntoa : 將結構體in_addr轉化為字符串并返回.

需要注意的是,inet_aton中的第二個參數struct in_addr可以傳入空指針,此時函數只會檢查字符串的有效性,不會存儲結果.

I/O讀寫函數

字節流套接字(例如TCP套接字)上的調用read或者write函數的時候得到的字節數可能會比請求的要少,這是由于套接字緩沖區已經滿了的
原因.稍后我會再推薦一篇關于套接字緩沖區的內容.

在本書中還寫了三個函數用來包裝read,write和readline,目的就是為了解決讀出的字節與請求字節不相同的問題.其中的關鍵點就是通過
重復調用函數,并且對函數的返回值加以判斷,如果是0或者EINTR的話就繼續循環,直到讀出請求的字節數為止.

轉載于:https://www.cnblogs.com/xinglong/p/5927629.html

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

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

相關文章

極樂科技CEO應邀出席2017微信小程序生態課

2019獨角獸企業重金招聘Python工程師標準>>> 1月9日凌晨小程序正式上線。張小龍第一時間在其朋友圈寫下一個日期—2007.1.9&#xff0c;并配上iPhone發布會的圖片&#xff0c;微信小程序如約而至。在興奮之際&#xff0c;極樂科技的大咖們也在思考&#xff1a;專注于…

藍橋杯 基礎練習 數列排序

http://lx.lanqiao.cn/problem.page?gpidT52 問題描述給定一個長度為n的數列&#xff0c;將這個數列按從小到大的順序排列。1<n<200輸入格式第一行為一個整數n。第二行包含n個整數&#xff0c;為待排序的數&#xff0c;每個整數的絕對值小于10000。輸出格式輸出一行&…

php 禁用通知,推送消息能不能區分禁止通知和卸載兩種類型?

消息推送ios用了apns&#xff0c;android用的是gcm。推送失敗都會返回無效的token&#xff0c;但是無效的tokne中&#xff0c;能不能區分到哪些是禁止通知&#xff0c;哪些是卸載app導致的呢&#xff1f;1 APNS PHP 的推送返回錯誤處理Push.php if (!empty($aMessage[ERRORS]))…

IOS13圖標尺寸_更新iOS13后,我的5臺iPhone都廢了

蘋果就是自帶熱搜體質&#xff0c;特別是在九月。機哥大概數了一下&#xff0c;光是線下發售后的這四天&#xff0c;iPhone 11 前前后后就上了 7 次熱搜。今天這一次熱搜&#xff0c;是因為庫克之前發了一條微博&#xff0c;夸自家 iPhone 11 是有史以來最出色的一款。在這條微…

Android 如何調用系統默認瀏覽器訪問

// 調用系統默認瀏覽器// 參考&#xff1a;// http://www.cnblogs.com/zhwl/archive/2011/11/15/2249848.html// https://segmentfault.com/a/1190000003912694case R.id.tv_about_weibo: // 關于微博// 直接打開 // Intent intent new Intent(); // …

kotlin函數式編程_我最喜歡的Kotlin函數式編程示例

kotlin函數式編程by Marcin Moskala通過Marcin Moskala One of the great things about Kotlin is that it supports functional programming. Let’s see and discuss some simple but expressive functions written in Kotlin.Kotlin的一大優點是它支持函數式編程。 讓我們看…

數據庫收縮

1.選中數據庫-任務-收縮-數據庫 2.全部壓縮 3.右鍵數據庫&#xff0c;屬性 4.找到自動收縮&#xff0c;設置為true 轉載于:https://www.cnblogs.com/RogerLu/p/10469819.html

matlab自帶kfcm函數,kfcmFun.m

function [center, U, obj_fcn] kfcmFun(data, cluster_n,maxit, kernel_b,expo)data_n size(data, 1); % 求出data的第一維(rows)數,即樣本個數obj_fcn zeros(100, 1);% 初始化輸出參數obj_fcnU initkfcm(cluster_n, data_n);% 初始化模糊分配矩陣,使U滿足列上相加為1inde…

flink sql udf jar包_Flink 生態:一個案例快速上手 PyFlink

簡介&#xff1a; Flink 從 1.9.0 版本開始增加了對 Python 的支持&#xff08;PyFlink&#xff09;&#xff0c;在剛剛發布的 Flink 1.10 中&#xff0c;PyFlink 添加了對 Python UDFs 的支持&#xff0c;現在可以在 Table API/SQL 中注冊并使用自定義函數。PyFlink 的架構如何…

賽思互動:為什么越來越多的企業愿意接受SaaS服務?

SaaS是Software-as-a-Service&#xff08;軟件即服務&#xff09;的簡稱&#xff0c;隨著互聯網技術的發展和應用軟件的成熟&#xff0c; 在21世紀開始興起的一種完全創新的軟件應用模式。SaaS 應用軟件的價格通常為“全包”費用&#xff0c;囊括了通常的應用軟件許可證費、軟件…

使用Google Cloud Platform分散您的應用程序

by Simeon Kostadinov通過Simeon Kostadinov 使用Google Cloud Platform分散您的應用程序 (Decentralize your application with Google Cloud Platform) When first starting a new software project, you normally choose a certain programming language, a specific frame…

pta通訊錄排序用python實現,python實現將android手機通訊錄vcf文件轉化為csv

經常會遇到將手機通訊錄導出到電腦并轉化為在電腦中可編輯的情況&#xff0c;在網上搜索了很久當前不外乎兩種處理方式。1.使用電腦的outlook的通訊簿功能&#xff0c;將手機導出的vcf文件導入到outlook的通訊錄中&#xff0c;然后再導出為可編輯文件&#xff1b;2.是使用專用軟…

從物聯網發展歷程看區塊鏈挑戰

2009年&#xff0c;中本聰發布了第一個比特幣節點&#xff0c;五年后區塊鏈儼然成為一個規模巨大的產業。 雖然看起來&#xff0c;基于區塊鏈的新的商業時代距離我們似乎只有一步之遙&#xff0c;但在2016年&#xff0c;我們已經意識到區塊鏈產業不會那么快獲得成功。 早期的新…

編程軟件python是什么意思_程序員Python編程必備5大工具,你用過幾個?

Python是編程入門不錯的選擇&#xff0c;現在也有不少的程序員業余時間會研究這門編程語言。 學習Python有時候沒有第一時間找到好工具&#xff0c;會吃不少的苦頭。畢竟好的工具能將工作效率多倍速提升。下面W3Cschool給小伙伴們推薦Python編程必備的5大工具&#xff1a; 0、I…

Linux ReviewBoard安裝與配置

目錄 0. 引言1. 安裝步驟2. 配置站點 2.1 創建數據庫2.2 開始安裝2.3 修改文件訪問權限2.4 Web服務器配置2.5 修改django相關配置正文 回到頂部0. 引言 環境&#xff1a;Ubuntu 14.04 Server&#xff08;虛擬機&#xff09; 這篇文章里說的是review board官方的安裝方式&#x…

小程序 graphql_GraphQL應用程序中的五個常見問題(以及如何解決)

小程序 graphqlby Sacha Greif由Sacha Greif GraphQL應用程序中的五個常見問題(以及如何解決) (Five Common Problems in GraphQL Apps (And How to Fix Them)) 了解如何釋放GraphQL的強大功能而不會遭受缺點 (Learn to unlock the power of GraphQL without suffering its dr…

又拍云 php5月18號那,又拍云文檔中心

移動流量平臺概述又拍云手機流量營銷平臺&#xff0c;整合移動、電信、聯通三大運營商流量資源&#xff0c;將強大的流量營銷服務&#xff0c;通過接口等形式提供給商家合作伙伴&#xff0c;幫助商家開展品牌宣傳、APP/游戲/微信公眾號/網站的拉新與促活等多種營銷活動。通過接…

SQL SERVER2000將多行查詢結果拼接到一行數據及函數的創建

處理前的查詢結果如上圖&#xff1a; 通過借助SQL變量的定義 DECLARE Scope varchar(1000) DECLARE Num int SET Scope SET Num 1 SELECT ScopeScopeconvert(varchar(8),Num)、DescScope DescOper;, Num Num1 From fuel_contractQualityNew Where ContractID0120090001…

kindeditor簡單使用

先引入&#xff1a; <script src"/static/jquery-3.3.1.min.js"></script><script src"/static/kindeditor-4.1.11-zh-CN/kindeditor/kindeditor-all.js"></script> 基本使用參數&#xff1a; $(function () {KindEditor.create(#…

windows nginx c++讀取請求數據_輕松應對百萬并發的Nginx,搞懂LinuxC/C++這些技術棧升職加薪...

在深入了解 Nginx 各種原理及在極端場景下的一些錯誤場景處理時&#xff0c;需要首先理解什么是網絡事件。Nginx 是一個事件驅動的框架&#xff0c;所謂事件主要指的是網絡事件&#xff0c;Nginx 每個網絡連接會對應兩個網絡事件&#xff0c;一個讀事件一個寫事件。在深入了解 …