基於TCP IP協議回射伺服器(Linux版本)

2021-10-09 21:04:38 字數 1199 閱讀 7010

前段時間練習時重新寫了一下基於tcp/ip協議的簡易回射伺服器。

大致流程是:

1、建立套接字,繫結服務端ip和埠

2、將套接字設定為監聽狀態

3、提取

4、讀寫

5、關閉

期間遇到一些簡單和複雜的問題,一些感覺需要注意的問題,接一下會選擇行的記錄。

#include

#include

#include

#include

#include

#include

"wrap.h"

void

free_process

(int sig)

else}}

intmain

(int argc,

char

*ar**)

else

if(pid ==0)

//子程序

else

if(n ==0)

//對方關閉j

else}}

else

//父程序

}//關閉

return0;

}

通過寫著組**時,對於為什麼子程序要關閉監聽字元產生了疑問,後來才知道這是驚群現象(ps:感覺自己好菜)

驚群現象

簡單來說就是多程序(執行緒)監聽同乙個事件,導致當事件發生時,多程序被喚醒,但是最終卻只能有乙個程序(執行緒)獲得這個時間的「控制權」,對該事件進行處理,而其他程序(執行緒)獲取「控制權」失敗,只能重新進入休眠狀態,這種現象和效能浪費就叫做驚群效應。

驚群效應危害:

1、linux 核心對使用者程序(執行緒)頻繁地做無效的排程、上下文切換等使系統效能大打折扣。上下文切換(context switch)過高會導致

cpu 像個搬運工,頻繁地在暫存器和執行佇列之間奔波,更多的時間花在了程序(執行緒)切換,而不是在真正工作的程序(執行緒)上面。直接的消耗包括cpu 暫存器要儲存和載入(例如程式計數器)、系統排程器的**需要執行。間接的消耗在於多核 cache 之間的共享資料。

早期版本中:linux對於該問題會報錯,因為乙個程序執行該事件後,其他程序就找不到該事件,會產生錯誤。

linux 2.6 版本之後,通過引入乙個標記位 wq_flag_exclusive,解決掉了 accept 驚群效應。

基於UDP協議的簡單回射伺服器的實現

1.無連線 2.基於訊息的資料傳輸服務 3.不可靠 4.一般情況下udp更加高效 ssize t recvfrom int sockfd,void buff,size t nbytes,int flags,struct sockaddr from socklen t addrlen ssize t ...

TCP 回射伺服器

tcp reflect server client tcp回射伺服器。學習了 unp 的第五章前面的知識,自己把 敲出來了,加深了理解吧。簡單地說就是,client傳送給server一條訊息 一行文字 server再將同樣地訊息傳送回client。就像這樣 用到的函式和api包括 1 socket ...

Linux C 回射伺服器

回射伺服器就是服務端將客戶端的資料傳送回去。我實現的回射伺服器返回增加了時間。服務端 可以很容易看懂 cpp view plain copy include include include include include include include include include define ...