multiple symbols of select(), do they matter?
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Hi, I am asking this for read(), write(), open() and close() as well. Thanks, -- LD. _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... For my library that interposes read(), write(), open(), close() and select(), I am wondering if I need to be a bit smarter about what I do depending on which _variant_ of each of these is actually called. My select() stuff looks like this… int select(int, fd_set * __restrict, fd_set * __restrict, fd_set * __restrict, struct timeval * __restrict) __asm("_select"); int select_darwinextsn(int, fd_set * __restrict, fd_set * __restrict, fd_set * __restrict, struct timeval * __restrict) __asm("_select $DARWIN_EXTSN"); int select_darwinextsn_nocancel(int, fd_set * __restrict, fd_set * __restrict, fd_set * __restrict, struct timeval * __restrict) __asm("_select$DARWIN_EXTSN$NOCANCEL"); int select_nocancel_unix2003(int, fd_set * __restrict, fd_set * __restrict, fd_set * __restrict, struct timeval * __restrict) __asm("_select$NOCANCEL$UNIX2003"); int select_unix2003(int, fd_set * __restrict, fd_set * __restrict, fd_set * __restrict, struct timeval * __restrict) __asm("_select $UNIX2003"); int select(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { // my code int (*real_select)(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) = dlsym(RTLD_NEXT, "select"); result = real_select(nfds, readfds, writefds, errorfds, timeout); // my code return result; } int select_darwinextsn(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { return select(nfds, readfds, writefds, errorfds, timeout); } int select_darwinextsn_nocancel(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { return select(nfds, readfds, writefds, errorfds, timeout); } int select_nocancel_unix2003(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { return select(nfds, readfds, writefds, errorfds, timeout); } int select_unix2003(int nfds, fd_set * __restrict readfds, fd_set * __restrict writefds, fd_set * __restrict errorfds, struct timeval * __restrict timeout) { return select(nfds, readfds, writefds, errorfds, timeout); } So my question is really two parts; Do they different variants of select() in libSystem actually do different things? And should I be actually fetching the implementation with dlsym() that matches what was actually called by the client of my code? For example, the 'NOCANCEL' variant makes me nervous, seems like I should be doing something there. But, I have no idea what. This email sent to site_archiver@lists.apple.com
participants (1)
-
Luke Daley