⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adns.h

📁 100 病毒源碼,原始碼,無毒 ......
💻 H
📖 第 1 页 / 共 3 页
字号:
 *  adns_init *  adns_submit 1 *  adns_submit 2 *  adns_submit 3 *  adns_wait 1 *  adns_check 3 -> EAGAIN *  adns_wait 2 *  adns_wait 3 *  .... *  adns_finish *//* * Entrypoints for generic asynch io: * (these entrypoints are not very useful except in combination with * * some of the other I/O model calls which can tell you which fds to * be interested in): * * Note that any adns call may cause adns to open and close fds, so * you must call beforeselect or beforepoll again just before * blocking, or you may not have an up-to-date list of it's fds. */int adns_processany(adns_state ads);/* Gives adns flow-of-control for a bit.  This will never block, and * can be used with any threading/asynch-io model.  If some error * occurred which might cause an event loop to spin then the errno * value is returned. */int adns_processreadable(adns_state ads, int fd, const struct timeval *now);int adns_processwriteable(adns_state ads, int fd, const struct timeval *now);int adns_processexceptional(adns_state ads, int fd, const struct timeval *now);/* Gives adns flow-of-control so that it can process incoming data * from, or send outgoing data via, fd.  Very like _processany.  If it * returns zero then fd will no longer be readable or writeable * (unless of course more data has arrived since).  adns will _only_ * use that fd and only in the manner specified, regardless of whether * adns_if_noautosys was specified. * * adns_processexceptional should be called when select(2) reports an * exceptional condition, or poll(2) reports POLLPRI. * * It is fine to call _processreabable or _processwriteable when the * fd is not ready, or with an fd that doesn't belong to adns; it will * then just return 0. * * If some error occurred which might prevent an event loop to spin * then the errno value is returned. */void adns_processtimeouts(adns_state ads, const struct timeval *now);/* Gives adns flow-of-control so that it can process any timeouts * which might have happened.  Very like _processreadable/writeable. * * now may be 0; if it isn't, *now must be the current time, recently * obtained from gettimeofday. */void adns_firsttimeout(adns_state ads,		       struct timeval **tv_mod, struct timeval *tv_buf,		       struct timeval now);/* Asks adns when it would first like the opportunity to time * something out.  now must be the current time, from gettimeofday. *  * If tv_mod points to 0 then tv_buf must be non-null, and * _firsttimeout will fill in *tv_buf with the time until the first * timeout, and make *tv_mod point to tv_buf.  If adns doesn't have * anything that might need timing out it will leave *tv_mod as 0. * * If *tv_mod is not 0 then tv_buf is not used.  adns will update * *tv_mod if it has any earlier timeout, and leave it alone if it * doesn't. * * This call will not actually do any I/O, or change the fds that adns * is using.  It always succeeds and never blocks. */void adns_globalsystemfailure(adns_state ads);/* If serious problem(s) happen which globally affect your ability to * interact properly with adns, or adns's ability to function * properly, you or adns can call this function. * * All currently outstanding queries will be made to fail with * adns_s_systemfail, and adns will close any stream sockets it has * open. * * This is used by adns, for example, if gettimeofday() fails. * Without this the program's event loop might start to spin ! * * This call will never block. *//* * Entrypoints for select-loop based asynch io: */void adns_beforeselect(adns_state ads, int *maxfd, fd_set *readfds,		       fd_set *writefds, fd_set *exceptfds,		       struct timeval **tv_mod, struct timeval *tv_buf,		       const struct timeval *now);/* Find out file descriptors adns is interested in, and when it would * like the opportunity to time something out.  If you do not plan to * block then tv_mod may be 0.  Otherwise, tv_mod and tv_buf are as * for adns_firsttimeout.  readfds, writefds, exceptfds and maxfd_io may * not be 0. * * If now is not 0 then this will never actually do any I/O, or change * the fds that adns is using or the timeouts it wants.  In any case * it won't block, and it will set the timeout to zero if a query * finishes in _beforeselect. */void adns_afterselect(adns_state ads, int maxfd, const fd_set *readfds,		      const fd_set *writefds, const fd_set *exceptfds,		      const struct timeval *now);/* Gives adns flow-of-control for a bit; intended for use after * select.  This is just a fancy way of calling adns_processreadable/ * writeable/timeouts as appropriate, as if select had returned the * data being passed.  Always succeeds. *//* * Example calling sequence: * *  adns_init _noautosys *  loop { *   adns_beforeselect *   select *   adns_afterselect *   ... *   adns_submit / adns_check *   ... *  } *//* * Entrypoints for poll-loop based asynch io: */struct pollfd;/* In case your system doesn't have it or you forgot to include * <sys/poll.h>, to stop the following declarations from causing * problems.  If your system doesn't have poll then the following * entrypoints will not be defined in libadns.  Sorry ! */int adns_beforepoll(adns_state ads, struct pollfd *fds, int *nfds_io, int *timeout_io,		    const struct timeval *now);/* Finds out which fd's adns is interested in, and when it would like * to be able to time things out.  This is in a form suitable for use * with poll(2). *  * On entry, usually fds should point to at least *nfds_io structs. * adns will fill up to that many structs will information for poll, * and record in *nfds_io how many structs it filled.  If it wants to * listen for more structs then *nfds_io will be set to the number * required and _beforepoll will return ERANGE. * * You may call _beforepoll with fds==0 and *nfds_io 0, in which case * adns will fill in the number of fds that it might be interested in * in *nfds_io, and always return either 0 (if it is not interested in * any fds) or ERANGE (if it is). * * NOTE that (unless now is 0) adns may acquire additional fds * from one call to the next, so you must put adns_beforepoll in a * loop, rather than assuming that the second call (with the buffer * size requested by the first) will not return ERANGE. * * adns only ever sets POLLIN, POLLOUT and POLLPRI in its pollfd * structs, and only ever looks at those bits.  POLLPRI is required to * detect TCP Urgent Data (which should not be used by a DNS server) * so that adns can know that the TCP stream is now useless. * * In any case, *timeout_io should be a timeout value as for poll(2), * which adns will modify downwards as required.  If the caller does * not plan to block then *timeout_io should be 0 on entry, or * alternatively, timeout_io may be 0.  (Alternatively, the caller may * use _beforeselect with timeout_io==0 to find out about file * descriptors, and use _firsttimeout is used to find out when adns * might want to time something out.) * * adns_beforepoll will return 0 on success, and will not fail for any * reason other than the fds buffer being too small (ERANGE). * * This call will never actually do any I/O.  If you supply the * current time it will not change the fds that adns is using or the * timeouts it wants. * * In any case this call won't block. */#define ADNS_POLLFDS_RECOMMENDED 2/* If you allocate an fds buf with at least RECOMMENDED entries then * you are unlikely to need to enlarge it.  You are recommended to do * so if it's convenient.  However, you must be prepared for adns to * require more space than this. */void adns_afterpoll(adns_state ads, const struct pollfd *fds, int nfds,		    const struct timeval *now);/* Gives adns flow-of-control for a bit; intended for use after * poll(2).  fds and nfds should be the results from poll().  pollfd * structs mentioning fds not belonging to adns will be ignored. */adns_status adns_rr_info(adns_rrtype type,			 const char **rrtname_r, const char **fmtname_r,			 int *len_r,			 const void *datap, char **data_r);/* * Get information about a query type, or convert reply data to a * textual form.  type must be specified, and the official name of the * corresponding RR type will be returned in *rrtname_r, and * information about the processing style in *fmtname_r.  The length * of the table entry in an answer for that type will be returned in * in *len_r.  Any or all of rrtname_r, fmtname_r and len_r may be 0. * If fmtname_r is non-null then *fmtname_r may be null on return, * indicating that no special processing is involved. * * data_r be must be non-null iff datap is.  In this case *data_r will * be set to point to a string pointing to a representation of the RR * data in master file format.  (The owner name, timeout, class and * type will not be present - only the data part of the RR.)  The * memory will have been obtained from malloc() and must be freed by * the caller. * * Usually this routine will succeed.  Possible errors include: *  adns_s_nomemory *  adns_s_rrtypeunknown *  adns_s_invaliddata (*datap contained garbage) * If an error occurs then no memory has been allocated, * and *rrtname_r, *fmtname_r, *len_r and *data_r are undefined. * * There are some adns-invented data formats which are not official * master file formats.  These include: * * Mailboxes if __qtf_mail822: these are just included as-is. * * Addresses (adns_rr_addr): these may be of pretty much any type. * The representation is in two parts: first, a word for the address * family (ie, in AF_XXX, the XXX), and then one or more items for the * address itself, depending on the format.  For an IPv4 address the * syntax is INET followed by the dotted quad (from inet_ntoa). * Currently only IPv4 is supported. * * Text strings (as in adns_rr_txt) appear inside double quotes, and * use \" and \\ to represent " and \, and \xHH to represent * characters not in the range 32-126. * * Hostname with addresses (adns_rr_hostaddr): this consists of the * hostname, as usual, followed by the adns_status value, as an * abbreviation, and then a descriptive string (encoded as if it were * a piece of text), for the address lookup, followed by zero or more * addresses enclosed in ( and ).  If the result was a temporary * failure, then a single ?  appears instead of the ( ).  If the * result was a permanent failure then an empty pair of parentheses * appears (which a space in between).  For example, one of the NS * records for greenend.org.uk comes out like *  ns.chiark.greenend.org.uk ok "OK" ( INET 195.224.76.132 ) * an MX referring to a nonexistent host might come out like: *  50 sun2.nsfnet-relay.ac.uk nxdomain "No such domain" ( ) * and if nameserver information is not available you might get: *  dns2.spong.dyn.ml.org timeout "DNS query timed out" ? */const char *adns_strerror(adns_status st);const char *adns_errabbrev(adns_status st);const char *adns_errtypeabbrev(adns_status st);/* Like strerror but for adns_status values.  adns_errabbrev returns * the abbreviation of the error - eg, for adns_s_timeout it returns * "timeout".  adns_errtypeabbrev returns the abbreviation of the * error class: ie, for values up to adns_s_max_XXX it will return the * string XXX.  You MUST NOT call these functions with status values * not returned by the same adns library. */#ifdef __cplusplus} /* end of extern "C" */#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -