This is select.c in view mode; [Download] [Up]
#define I_SYS #define I_ERRNO #include "includes.h" void do_select_loop(int sock, int in_f, int out_f) { struct Buffer in = {{0},0,0,0}, out = {{0},0,0,0}; int i; in.start = in.end = in.size = 0; out.start = out.end = out.size = 0; while (1) { fd_set rd, wr; int max; max = 0; FD_ZERO(&rd); FD_ZERO(&wr); if (in.size) { FD_SET(sock, &wr); if (sock > max) max = sock; } else { FD_SET(in_f, &rd); if (in_f > max) max = in_f; } if (out.size) { FD_SET(out_f, &wr); if (out_f > max) max = out_f; } else { FD_SET(sock, &rd); if(sock > max) max = sock; } select(max+1, &rd, &wr, 0, 0); if (FD_ISSET(out_f, &wr)) { i = write_from_buff(out_f, &out, 0); if (i <1 && term_errno) break; } if (FD_ISSET(sock, &wr)) { i = write_from_buff(sock, &in, 0); if (i<1 && term_errno) break; } if (FD_ISSET(in_f, &rd)) { i = read_into_buff(in_f, &in, 0); if (i<1 && term_errno) break; } if (FD_ISSET(sock, &rd)) { i = read_into_buff(sock, &out, 0); if (i<1 && term_errno) break; } } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.