作为对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函数中不再需要处理套接字所发生的事件,使得程序结构变得清晰、简洁。