ping原始碼代閱讀 三 面向連線tcp ip程式

2021-05-28 15:44:30 字數 1093 閱讀 3799

在ping原始碼代閱讀(一)中,詳細表述了伺服器端和客戶端的互動過程,在這裡以**的形式分析其過程.

伺服器端:

bind到乙個埠後,使用listen開始收聽所有的請求,這裡在核心建立了乙個長度為10的佇列,一有請求就會放入到隊尾.accept從隊頭取出乙個請求開始處理.然後向此請求寫入資料.

s = socket(pf_inet,sock_stream,0);

memset(&adr_srvr,0,sizeof adr_srvr);

adr_srvr.sin_family = af_inet;

adr_srvr.sin_port = htons(atoi(srvr_port));

if ( strcmp(srvr_addr,"*") != 0 ) else

len_inet = sizeof adr_srvr;

z = bind(s,(struct sockaddr *)&adr_srvr,

len_inet);

z = listen(s,10);

for (;;)

close(c);

}

客戶端:

客戶端連線到這個服務埠,最後這個請求將被執行,寫回資料,在這裡用read把傳回的資料讀出來,read每次唯讀了128的位元組,所以這裡需不斷重複讀.直到資料長度為0時終止.

s = socket(pf_inet,sock_stream,0);

memset(&adr_srvr,0,sizeof adr_srvr);

adr_srvr.sin_family = af_inet;

adr_srvr.sin_port = htons(atoi(srvr_port));

adr_srvr.sin_addr.s_addr =

inet_addr(srvr_addr);

len_inet = sizeof adr_srvr;

z = connect(s,&adr_srvr,len_inet);

while(1)

close(s);

如果知道這個過程如何完成之後,看圖會更加形像.

ping原始碼代閱讀 三 UDP資料報程式

非連線的通訊是一種什麼情況呢?可以通過sedto向任何乙個套介面傳送資料,如果想收聽某一套介面上別人傳送過來的資料,通過bind繫結到這個套接中,使用recvfrom接收.如果想做應答,那麼通過recvfrom的第五個引數知道了傳送過來程式的情況,進而可以對這個程式進行應答.這樣就可以多個程式向這乙...

SparkSQL(原始碼閱讀三)

額,沒忍住,想完全了解sparksql,畢竟一直在用嘛,想一次性搞清楚它,所以今天再多看點好了 曾幾何時,有乙個叫做shark的東西,它改了hive的原始碼。突然有一天,spark sql突然出現,如下圖 好了,不逗了,言歸正傳。那麼一條sql傳統資料庫會是怎麼解析的呢?傳統資料庫的解析過程是按ru...

String原始碼閱讀(三)

public string split string regex,int limit else if no match was found,return this if off 0 return new string 如果limit大於最大返回長度,上面else中的 不會執行,在此處將最後一段放入l...