1.新增乙個socket任務
1 envir().taskscheduler().setbackgroundhandling(socketnum, socket_writable|socket_exception,2.接下來就會把相關引數設定進socket任務集合中去,接下來就是等待任務排程。2 (taskscheduler::backgroundhandlerproc*)&connectionhandler, this);
fhandlers->assignhandler(socketnum, conditionset, handlerproc, clientdata)
class handlerset是乙個鍊錶類,裡面存在乙個成員變數fhandlers,是這個鍊錶的頭結點。
assignhandler函式會將socket相關的一些引數,函式指標等封裝成乙個新節點,插入鍊錶。
3.doeventloop 是事件迴圈函式,用於排程事件。
14.在singlestep函式中使用select來監聽socket的任務的發生。void basictaskscheduler0::doeventloop(char*watchvariable)
7 }
1在singlestep中使用了乙個引數 flasthandledsocketnum 記錄了上次任務發生時該任務在鍊錶中的位置。int selectresult = select(fmaxnumsockets, &readset, &writeset, &exceptionset, &tv_timetodelay);
2
a.檢測是否上次的任務在任務鍊錶中的某乙個位置,如果在就從這個位置開始查詢是否發生socket任務。
if (flasthandledsocketnum >= 0b. 如果沒有任何soket任務發生,於是認為有可能在flasthandledsocketnum 任務鍊錶位置前面的某乙個地方發生了socket任務。接下來就)
if (handler ==null)
} while ((handler = iter.next()) !=null)
}
從煉表頭開始遍歷,查詢socket任務的發生。
15.查詢到socket任務的socket時,排程相關的函式指標,執行相關函式。同時 flasthandledsocketnum = sockif (handler == null && flasthandledsocketnum >= 0
) 18}19
if (handler == null) flasthandledsocketnum = -1;//
because we didn't call a handler
20 }
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...