strcliselect02.lc 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "unp.h"## 1 ##src/select/strcliselect02.c##
  2. void## 2 ##src/select/strcliselect02.c##
  3. str_cli(FILE *fp, int sockfd)## 3 ##src/select/strcliselect02.c##
  4. {## 4 ##src/select/strcliselect02.c##
  5. int maxfdp1, stdineof;## 5 ##src/select/strcliselect02.c##
  6. fd_set rset;## 6 ##src/select/strcliselect02.c##
  7. char sendline[MAXLINE], recvline[MAXLINE];## 7 ##src/select/strcliselect02.c##
  8. stdineof = 0;## 8 ##src/select/strcliselect02.c##
  9. FD_ZERO(&rset);## 9 ##src/select/strcliselect02.c##
  10. for (;;) {## 10 ##src/select/strcliselect02.c##
  11. if (stdineof == 0)## 11 ##src/select/strcliselect02.c##
  12. FD_SET(fileno(fp), &rset);## 12 ##src/select/strcliselect02.c##
  13. FD_SET(sockfd, &rset);## 13 ##src/select/strcliselect02.c##
  14. maxfdp1 = max(fileno(fp), sockfd) + 1;## 14 ##src/select/strcliselect02.c##
  15. Select(maxfdp1, &rset, NULL, NULL, NULL);## 15 ##src/select/strcliselect02.c##
  16. if (FD_ISSET(sockfd, &rset)) { /* socket is readable */## 16 ##src/select/strcliselect02.c##
  17. if (Readline(sockfd, recvline, MAXLINE) == 0) {## 17 ##src/select/strcliselect02.c##
  18. if (stdineof == 1)## 18 ##src/select/strcliselect02.c##
  19. return; /* normal termination */## 19 ##src/select/strcliselect02.c##
  20. else## 20 ##src/select/strcliselect02.c##
  21. err_quit("str_cli: server terminated prematurely");## 21 ##src/select/strcliselect02.c##
  22. }## 22 ##src/select/strcliselect02.c##
  23. Fputs(recvline, stdout);## 23 ##src/select/strcliselect02.c##
  24. }## 24 ##src/select/strcliselect02.c##
  25. if (FD_ISSET(fileno(fp), &rset)) { /* input is readable */## 25 ##src/select/strcliselect02.c##
  26. if (Fgets(sendline, MAXLINE, fp) == NULL) {## 26 ##src/select/strcliselect02.c##
  27. stdineof = 1;## 27 ##src/select/strcliselect02.c##
  28. Shutdown(sockfd, SHUT_WR); /* send FIN */## 28 ##src/select/strcliselect02.c##
  29. FD_CLR(fileno(fp), &rset);## 29 ##src/select/strcliselect02.c##
  30. continue;## 30 ##src/select/strcliselect02.c##
  31. }## 31 ##src/select/strcliselect02.c##
  32. Writen(sockfd, sendline, strlen(sendline));## 32 ##src/select/strcliselect02.c##
  33. }## 33 ##src/select/strcliselect02.c##
  34. }## 34 ##src/select/strcliselect02.c##
  35. }## 35 ##src/select/strcliselect02.c##