Ixp_pending_write, ixp_pending_print, ixp_pending_vprint, ixp_pending_pushfid, ixp_pending_clunk, ixp_pending_flush, ixp_pending_respond, ixppending
#include <ixp_srvutil.h> void ixp_pending_write(IxpPending *pending, const char *dat, long ndat); int ixp_pending_print(IxpPending *pending, const char *fmt, ...); int ixp_pending_vprint(IxpPending *pending, const char *fmt, va_list ap); void ixp_pending_pushfid(IxpPending *pending, IxpFid *fid); bool ixp_pending_clunk(Ixp9Req *req); void ixp_pending_flush(Ixp9Req *req); void ixp_pending_respond(Ixp9Req *req); typedef struct IxpPending IxpPending; struct IxpPending { /* Private members */ ... }
These functions aid in writing virtual files used for broadcasting events or writing data when it becomes available. When a file to be used with these functions is opened, ixp_pending_pushfid should be called with its IxpFid(3) as an argument. This sets the IxpFid's pending member to true. Thereafter, for each file with its pending member set, ixp_pending_respond should be called for each TRead request, ixp_pending_clunk for each TClunk request, and ixp_pending_flush for each TFlush request.
ixp_pending_write queues the data in dat of length ndat to be written to each currently pending fid in pending. If there is a read request pending for a given fid, the data is written immediately. Otherwise, it is written the next time ixp_pending_respond is called. Likewise, if there is data queued when ixp_pending_respond is called, it is written immediately, otherwise the request is queued.
ixp_pending_print and ixp_pending_vprint call ixp_pending_write after formatting their arguments with ixp_vsmprint(3).
The IxpPending data structure is opaque and should be initialized zeroed before using these functions for the first time.
ixp_pending_clunk returns true if pending has any more pending IxpFids.