checkopts.lc 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /* include checkopts1 */
  2. #include "unp.h"## 1 ##src/sockopt/checkopts.c##
  3. #include <netinet/tcp.h> /* for TCP_xxx defines */## 2 ##src/sockopt/checkopts.c##
  4. union val {## 3 ##src/sockopt/checkopts.c##
  5. int i_val;## 4 ##src/sockopt/checkopts.c##
  6. long l_val;## 5 ##src/sockopt/checkopts.c##
  7. char c_val[10];## 6 ##src/sockopt/checkopts.c##
  8. struct linger linger_val;## 7 ##src/sockopt/checkopts.c##
  9. struct timeval timeval_val;## 8 ##src/sockopt/checkopts.c##
  10. } val;## 9 ##src/sockopt/checkopts.c##
  11. static char *sock_str_flag(union val *, int);## 10 ##src/sockopt/checkopts.c##
  12. static char *sock_str_int(union val *, int);## 11 ##src/sockopt/checkopts.c##
  13. static char *sock_str_linger(union val *, int);## 12 ##src/sockopt/checkopts.c##
  14. static char *sock_str_timeval(union val *, int);## 13 ##src/sockopt/checkopts.c##
  15. struct sock_opts {## 14 ##src/sockopt/checkopts.c##
  16. char *opt_str;## 15 ##src/sockopt/checkopts.c##
  17. int opt_level;## 16 ##src/sockopt/checkopts.c##
  18. int opt_name;## 17 ##src/sockopt/checkopts.c##
  19. char *(*opt_val_str)(union val *, int);## 18 ##src/sockopt/checkopts.c##
  20. } sock_opts[] = {## 19 ##src/sockopt/checkopts.c##
  21. "SO_BROADCAST", SOL_SOCKET, SO_BROADCAST, sock_str_flag,## 20 ##src/sockopt/checkopts.c##
  22. "SO_DEBUG", SOL_SOCKET, SO_DEBUG, sock_str_flag,## 21 ##src/sockopt/checkopts.c##
  23. "SO_DONTROUTE", SOL_SOCKET, SO_DONTROUTE, sock_str_flag,## 22 ##src/sockopt/checkopts.c##
  24. "SO_ERROR", SOL_SOCKET, SO_ERROR, sock_str_int,## 23 ##src/sockopt/checkopts.c##
  25. "SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE, sock_str_flag,## 24 ##src/sockopt/checkopts.c##
  26. "SO_LINGER", SOL_SOCKET, SO_LINGER, sock_str_linger,## 25 ##src/sockopt/checkopts.c##
  27. "SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE, sock_str_flag,## 26 ##src/sockopt/checkopts.c##
  28. "SO_RCVBUF", SOL_SOCKET, SO_RCVBUF, sock_str_int,## 27 ##src/sockopt/checkopts.c##
  29. "SO_SNDBUF", SOL_SOCKET, SO_SNDBUF, sock_str_int,## 28 ##src/sockopt/checkopts.c##
  30. "SO_RCVLOWAT", SOL_SOCKET, SO_RCVLOWAT, sock_str_int,## 29 ##src/sockopt/checkopts.c##
  31. "SO_SNDLOWAT", SOL_SOCKET, SO_SNDLOWAT, sock_str_int,## 30 ##src/sockopt/checkopts.c##
  32. "SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, sock_str_timeval,## 31 ##src/sockopt/checkopts.c##
  33. "SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, sock_str_timeval,## 32 ##src/sockopt/checkopts.c##
  34. "SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR, sock_str_flag,## 33 ##src/sockopt/checkopts.c##
  35. #ifdef SO_REUSEPORT## 34 ##src/sockopt/checkopts.c##
  36. "SO_REUSEPORT", SOL_SOCKET, SO_REUSEPORT, sock_str_flag,## 35 ##src/sockopt/checkopts.c##
  37. #else## 36 ##src/sockopt/checkopts.c##
  38. "SO_REUSEPORT", 0, 0, NULL,## 37 ##src/sockopt/checkopts.c##
  39. #endif## 38 ##src/sockopt/checkopts.c##
  40. "SO_TYPE", SOL_SOCKET, SO_TYPE, sock_str_int,## 39 ##src/sockopt/checkopts.c##
  41. "SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag,## 40 ##src/sockopt/checkopts.c##
  42. "IP_TOS", IPPROTO_IP, IP_TOS, sock_str_int,## 41 ##src/sockopt/checkopts.c##
  43. "IP_TTL", IPPROTO_IP, IP_TTL, sock_str_int,## 42 ##src/sockopt/checkopts.c##
  44. "TCP_MAXSEG", IPPROTO_TCP,TCP_MAXSEG, sock_str_int,## 43 ##src/sockopt/checkopts.c##
  45. "TCP_NODELAY", IPPROTO_TCP,TCP_NODELAY, sock_str_flag,## 44 ##src/sockopt/checkopts.c##
  46. NULL, 0, 0, NULL## 45 ##src/sockopt/checkopts.c##
  47. };## 46 ##src/sockopt/checkopts.c##
  48. /* end checkopts1 */
  49. /* include checkopts2 */
  50. int## 47 ##src/sockopt/checkopts.c##
  51. main(int argc, char **argv)## 48 ##src/sockopt/checkopts.c##
  52. {## 49 ##src/sockopt/checkopts.c##
  53. int fd, len;## 50 ##src/sockopt/checkopts.c##
  54. struct sock_opts *ptr;## 51 ##src/sockopt/checkopts.c##
  55. fd = Socket(AF_INET, SOCK_STREAM, 0);## 52 ##src/sockopt/checkopts.c##
  56. for (ptr = sock_opts; ptr->opt_str != NULL; ptr++) {## 53 ##src/sockopt/checkopts.c##
  57. printf("%s: ", ptr->opt_str);## 54 ##src/sockopt/checkopts.c##
  58. if (ptr->opt_val_str == NULL)## 55 ##src/sockopt/checkopts.c##
  59. printf("(undefined)\n");## 56 ##src/sockopt/checkopts.c##
  60. else {## 57 ##src/sockopt/checkopts.c##
  61. len = sizeof(val);## 58 ##src/sockopt/checkopts.c##
  62. if (getsockopt(fd, ptr->opt_level, ptr->opt_name,## 59 ##src/sockopt/checkopts.c##
  63. &val, &len) == -1) {## 60 ##src/sockopt/checkopts.c##
  64. err_ret("getsockopt error");## 61 ##src/sockopt/checkopts.c##
  65. } else {## 62 ##src/sockopt/checkopts.c##
  66. printf("default = %s\n", (*ptr->opt_val_str) (&val, len));## 63 ##src/sockopt/checkopts.c##
  67. }## 64 ##src/sockopt/checkopts.c##
  68. }## 65 ##src/sockopt/checkopts.c##
  69. }## 66 ##src/sockopt/checkopts.c##
  70. exit(0);## 67 ##src/sockopt/checkopts.c##
  71. }## 68 ##src/sockopt/checkopts.c##
  72. /* end checkopts2 */
  73. /* include checkopts3 */
  74. static char strres[128];## 69 ##src/sockopt/checkopts.c##
  75. static char *## 70 ##src/sockopt/checkopts.c##
  76. sock_str_flag(union val *ptr, int len)## 71 ##src/sockopt/checkopts.c##
  77. {## 72 ##src/sockopt/checkopts.c##
  78. if (len != sizeof(int))## 73 ##src/sockopt/checkopts.c##
  79. snprintf(strres, sizeof(strres), "size (%d) not sizeof(int)", len);## 74 ##src/sockopt/checkopts.c##
  80. else## 75 ##src/sockopt/checkopts.c##
  81. snprintf(strres, sizeof(strres),## 76 ##src/sockopt/checkopts.c##
  82. "%s", (ptr->i_val == 0) ? "off" : "on");## 77 ##src/sockopt/checkopts.c##
  83. return(strres);## 78 ##src/sockopt/checkopts.c##
  84. }## 79 ##src/sockopt/checkopts.c##
  85. /* end checkopts3 */
  86. static char *## 80 ##src/sockopt/checkopts.c##
  87. sock_str_int(union val *ptr, int len)## 81 ##src/sockopt/checkopts.c##
  88. {## 82 ##src/sockopt/checkopts.c##
  89. if (len != sizeof(int))## 83 ##src/sockopt/checkopts.c##
  90. snprintf(strres, sizeof(strres), "size (%d) not sizeof(int)", len);## 84 ##src/sockopt/checkopts.c##
  91. else## 85 ##src/sockopt/checkopts.c##
  92. snprintf(strres, sizeof(strres), "%d", ptr->i_val);## 86 ##src/sockopt/checkopts.c##
  93. return (strres);## 87 ##src/sockopt/checkopts.c##
  94. }## 88 ##src/sockopt/checkopts.c##
  95. static char *## 89 ##src/sockopt/checkopts.c##
  96. sock_str_linger(union val *ptr, int len)## 90 ##src/sockopt/checkopts.c##
  97. {## 91 ##src/sockopt/checkopts.c##
  98. struct linger *lptr = &ptr->linger_val;## 92 ##src/sockopt/checkopts.c##
  99. if (len != sizeof(struct linger))## 93 ##src/sockopt/checkopts.c##
  100. snprintf(strres, sizeof(strres),## 94 ##src/sockopt/checkopts.c##
  101. "size (%d) not sizeof(struct linger)", len);## 95 ##src/sockopt/checkopts.c##
  102. else## 96 ##src/sockopt/checkopts.c##
  103. snprintf(strres, sizeof(strres), "l_onoff = %d, l_linger = %d",## 97 ##src/sockopt/checkopts.c##
  104. lptr->l_onoff, lptr->l_linger);## 98 ##src/sockopt/checkopts.c##
  105. return (strres);## 99 ##src/sockopt/checkopts.c##
  106. }##100 ##src/sockopt/checkopts.c##
  107. static char *##101 ##src/sockopt/checkopts.c##
  108. sock_str_timeval(union val *ptr, int len)##102 ##src/sockopt/checkopts.c##
  109. {##103 ##src/sockopt/checkopts.c##
  110. struct timeval *tvptr = &ptr->timeval_val;##104 ##src/sockopt/checkopts.c##
  111. if (len != sizeof(struct timeval))##105 ##src/sockopt/checkopts.c##
  112. snprintf(strres, sizeof(strres),##106 ##src/sockopt/checkopts.c##
  113. "size (%d) not sizeof(struct timeval)", len);##107 ##src/sockopt/checkopts.c##
  114. else##108 ##src/sockopt/checkopts.c##
  115. snprintf(strres, sizeof(strres), "%d sec, %d usec",##109 ##src/sockopt/checkopts.c##
  116. tvptr->tv_sec, tvptr->tv_usec);##110 ##src/sockopt/checkopts.c##
  117. return (strres);##111 ##src/sockopt/checkopts.c##
  118. }##112 ##src/sockopt/checkopts.c##