test04.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "unp.h"
  2. void
  3. sig_alrm(int signo)
  4. {
  5. }
  6. int
  7. main(int argc, char **argv)
  8. {
  9. int sockfd, n;
  10. struct sockaddr_in servaddr;
  11. struct itimerval val;
  12. fd_set rset, wset;
  13. if (argc != 2)
  14. err_quit("usage: a.out <IPaddress>");
  15. if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  16. err_sys("socket error");
  17. bzero(&servaddr, sizeof(servaddr));
  18. servaddr.sin_family = AF_INET;
  19. servaddr.sin_port = htons(13); /* echo server */
  20. Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  21. /* Set interval timer to go off before 3WHS completes */
  22. Signal(SIGALRM, sig_alrm);
  23. val.it_interval.tv_sec = 0;
  24. val.it_interval.tv_usec = 0;
  25. val.it_value.tv_sec = 0;
  26. val.it_value.tv_usec = 50000; /* 50 ms */
  27. if (setitimer(ITIMER_REAL, &val, NULL) == -1)
  28. err_sys("setitimer error");
  29. again:
  30. if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0) {
  31. if (errno == EINTR) {
  32. #ifdef notdef
  33. goto again; /* second call to connect() -> EADDRINUSE */
  34. #endif
  35. #ifdef notdef
  36. printf("interrupted system call\n");
  37. exit(0);
  38. #endif
  39. } else
  40. err_sys("connect error");
  41. }
  42. FD_ZERO(&rset);
  43. FD_SET(sockfd, &rset);
  44. wset = rset;
  45. sleep(4);
  46. n = Select(sockfd+1, &rset, &wset, NULL, NULL);
  47. printf("select returned %d\n", n);
  48. if (FD_ISSET(sockfd, &rset))
  49. printf("socket is readable\n");
  50. if (FD_ISSET(sockfd, &wset))
  51. printf("socket is writable\n");
  52. str_cli(stdin, sockfd); /* do it all */
  53. exit(0);
  54. }