live555 中的socket的任務排程分析

2022-08-21 20:45:09 字數 1777 閱讀 2796

1.新增乙個socket任務

1       envir().taskscheduler().setbackgroundhandling(socketnum, socket_writable|socket_exception,

2 (taskscheduler::backgroundhandlerproc*)&connectionhandler, this);

2.接下來就會把相關引數設定進socket任務集合中去,接下來就是等待任務排程。

fhandlers->assignhandler(socketnum, conditionset, handlerproc, clientdata)

class handlerset是乙個鍊錶類,裡面存在乙個成員變數fhandlers,是這個鍊錶的頭結點。
assignhandler函式會將socket相關的一些引數,函式指標等封裝成乙個新節點,插入鍊錶。

3.doeventloop 是事件迴圈函式,用於排程事件。

1

void basictaskscheduler0::doeventloop(char*watchvariable)

7 }

4.在singlestep函式中使用select來監聽socket的任務的發生

1

int selectresult = select(fmaxnumsockets, &readset, &writeset, &exceptionset, &tv_timetodelay);

2

在singlestep中使用了乙個引數 flasthandledsocketnum 記錄了上次任務發生時該任務在鍊錶中的位置。

a.檢測是否上次的任務在任務鍊錶中的某乙個位置,如果在就從這個位置開始查詢是否發生socket任務。

if (flasthandledsocketnum >= 0

)

if (handler ==null)

} while ((handler = iter.next()) !=null)

}

b. 如果沒有任何soket任務發生,於是認為有可能在flasthandledsocketnum 任務鍊錶位置前面的某乙個地方發生了socket任務。接下來就

從煉表頭開始遍歷,查詢socket任務的發生。

1

if (handler == null && flasthandledsocketnum >= 0

) 18}19

if (handler == null) flasthandledsocketnum = -1;//

because we didn't call a handler

20 }

5.查詢到socket任務的socket時,排程相關的函式指標,執行相關函式。同時 flasthandledsocketnum = sock

1       flasthandledsocketnum =sock;

2 (*handler->handlerproc)(handler->clientdata, resultconditionset);

live555原始碼分析 live555大致流程

今天大致分析了下live555的流程,以h264為例子進行的分析.從連線到傳送rtp rtcp資料報。首先分析呢,不能太關注細節,先整體再區域性。在分析的過程中,設計到live555自己封裝的乙個高階類 比如迭代器,雜湊表,而且這2個類在live555中運用的範圍還非常的廣,但是無不例外都是用鍊錶進...

Live555學習筆記

live555原始碼 官網 關於live555編譯 linux編譯 1.進入live555目錄 cd live 2.執行genmakefiles檔案 genmakefiles linux 3.makefile windows編譯 無關於入口函式 標頭檔案位置 無 原始檔位置 mediaserver ...

Live555學習筆記

前一陣子,因為專案需要,研究了一下live555開源框架,研究的不是很深入,基本上把live555當做api用了一下,但是畢竟也是本人看的第乙個開源框架,在此記錄總結一下。主要使用其中的四個目錄,分別對應live555的四個庫 usageenvironment目錄,生成的靜態庫為libusageen...