作為對(duì)BSD Socket接口的補(bǔ)充,ZLIP實(shí)現(xiàn)了類似MFC的回調(diào)機(jī)制。ZLIP的OnAccept、OnRecv、OnClose、OnConnect、OnRecvFrom回調(diào)機(jī)制能夠在TCP被連接、接收到數(shù)據(jù)、連接關(guān)閉、連接建立、UDP接收到數(shù)據(jù)情況下立即執(zhí)行回調(diào)函數(shù),和使用select函數(shù)編程相比回調(diào)機(jī)制在某些方面更加具有靈活性。
實(shí)例程序test_complex_send_recv就是使用類MFC回調(diào)機(jī)制的典型例子。使用回調(diào)機(jī)制編程具有如下的固定模式:
void OnAccept(SOCKET s) REENTRANT_SIG
{
/* 接受連接后的處理 */
…
}
void OnRecv(SOCKET s) REENTRANT_SIG
{
/* 接收到數(shù)據(jù)后的處理 */
…
}
void OnClose(SOCKET s) REENTRANT_SIG
{
/* 被關(guān)閉連接后的處理 */
…
}
void OnConnect(SOCKET s) REENTRANT_SIG
{
/* 連接建立后的處理 */
…
}
void OnRecvFrom(SOCKET s) REENTRANT_SIG
{
/* UDP接收到數(shù)據(jù)后的處理 */
…
}
main()
{
…
/* 設(shè)置回調(diào)函數(shù) */
ZLSetCallback(s, OnAccept, CALL_BK_ACCEPT);
ZLSetCallback(s, OnRecv, CALL_BK_RECV);
ZLSetCallback(s, OnClose, CALL_BK_CLOSE);
ZLSetCallback(s, OnConnect, CALL_BK_CONNECT);
ZLSetCallback(s, OnRecvFrom, CALL_BK_RECVFROM)
…
}
回調(diào)機(jī)制的優(yōu)點(diǎn)就在于,一旦設(shè)置好回調(diào)函數(shù)之后,用戶在main函數(shù)中不再需要處理套接字所發(fā)生的事件,使得程序結(jié)構(gòu)變得清晰、簡(jiǎn)潔。