作為對BSD Socket接口的補充,ZLIP實現了類似MFC的回調機制。ZLIP的OnAccept、OnRecv、OnClose、OnConnect、OnRecvFrom回調機制能夠在TCP被連接、接收到數據、連接關閉、連接建立、UDP接收到數據情況下立即執行回調函數,和使用select函數編程相比回調機制在某些方面更加具有靈活性。
實例程序test_complex_send_recv就是使用類MFC回調機制的典型例子。使用回調機制編程具有如下的固定模式:
void OnAccept(SOCKET s) REENTRANT_SIG
{
/* 接受連接后的處理 */
…
}
void OnRecv(SOCKET s) REENTRANT_SIG
{
/* 接收到數據后的處理 */
…
}
void OnClose(SOCKET s) REENTRANT_SIG
{
/* 被關閉連接后的處理 */
…
}
void OnConnect(SOCKET s) REENTRANT_SIG
{
/* 連接建立后的處理 */
…
}
void OnRecvFrom(SOCKET s) REENTRANT_SIG
{
/* UDP接收到數據后的處理 */
…
}
main()
{
…
/* 設置回調函數 */
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)
…
}
回調機制的優點就在于,一旦設置好回調函數之后,用戶在main函數中不再需要處理套接字所發生的事件,使得程序結構變得清晰、簡潔。