#include #include #include #include #include #include "sys/socket.h" #include "netinet/in.h" #include "arpa/inet.h" #include "sys/select.h" #include "ufunc.h" int main(int argc, char **argv) { int s, f; int rv; struct fd_set fdr, fdw, fde; struct timeval tv; int32 rtc; char path[PATH_MAX]; test_banner("Select Test #2"); s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) err(s, "Socket creation failed"); getcwd(path, PATH_MAX); sprintf(path, "%s/select_test2.c", path); f = open(path, O_RDWR); if (f > 0 && s > 0) { printf("\nsocket and fd created.\n"); } else { err(-1, "Failed to create socket or fd\n"); } FD_ZERO(&fdr); FD_SET(s, &fdr); FD_ZERO(&fdw); FD_SET(s, &fdw); FD_ZERO(&fde); FD_SET(s, &fde); tv.tv_sec = 5; tv.tv_usec = 0; printf("\nTest1\n=====\n\n"); printf("Trying with timeval (5 secs)...\n"); rtc = real_time_clock(); rv = select(s + 1, &fdr, NULL, &fde, &tv); rtc = real_time_clock() - rtc; printf("select gave %d (expecting 0) in %ld seconds\n", rv, rtc); FD_ZERO(&fdr); FD_SET(s, &fdr); FD_SET(f, &fdr); FD_ZERO(&fdw); FD_SET(s, &fdw); FD_ZERO(&fde); FD_SET(s, &fde); printf("\nTest2\n=====\n\n"); printf("Trying without timeval and both sockets and files...\n"); rv = select(f +1, &fdr, NULL, NULL, NULL); printf("select gave %d (expecting 2)\n", rv); if (rv > 0) { if (FD_ISSET(s, &fdr)) printf("Data to read\n"); if (FD_ISSET(s, &fdw)) printf("OK to write\n"); if (FD_ISSET(s, &fde)) printf("Exception!\n"); if (FD_ISSET(f, &fdr)) printf("File is readable!\n"); } else if (rv == 0) { printf("Timed out??? huh?!\n"); } else { printf("errno = %d [%s]\n", errno, strerror(errno)); } closesocket(s); close(f); printf("Test complete.\n"); return (0); }