PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/benchmarks/rdoc/ruby_trunk/ext/socket/mkconstants.rb

http://github.com/acangiano/ruby-benchmark-suite
Ruby | 683 lines | 610 code | 60 blank | 13 comment | 20 complexity | 0dc35c8e9c80d2a54029181f3c5bceb5 MD5 | raw file
Possible License(s): MIT, BSD-3-Clause, CC-BY-SA-3.0, LGPL-2.0, ISC, LGPL-2.1, GPL-2.0
  1. require 'optparse'
  2. require 'erb'
  3. opt = OptionParser.new
  4. opt.def_option('-h', 'help') {
  5. puts opt
  6. exit 0
  7. }
  8. opt_o = nil
  9. opt.def_option('-o FILE', 'specify output file') {|filename|
  10. opt_o = filename
  11. }
  12. opt_H = nil
  13. opt.def_option('-H FILE', 'specify output header file') {|filename|
  14. opt_H = filename
  15. }
  16. C_ESC = {
  17. "\\" => "\\\\",
  18. '"' => '\"',
  19. "\n" => '\n',
  20. }
  21. 0x00.upto(0x1f) {|ch| C_ESC[[ch].pack("C")] ||= "\\%03o" % ch }
  22. 0x7f.upto(0xff) {|ch| C_ESC[[ch].pack("C")] = "\\%03o" % ch }
  23. C_ESC_PAT = Regexp.union(*C_ESC.keys)
  24. def c_str(str)
  25. '"' + str.gsub(C_ESC_PAT) {|s| C_ESC[s]} + '"'
  26. end
  27. opt.parse!
  28. h = {}
  29. DATA.each_line {|s|
  30. name, default_value = s.scan(/\S+/)
  31. next unless name && name[0] != ?#
  32. if h.has_key? name
  33. warn "#{$.}: warning: duplicate name: #{name}"
  34. next
  35. end
  36. h[name] = default_value
  37. }
  38. DEFS = h.to_a
  39. def each_const
  40. DEFS.each {|name, default_value|
  41. if name =~ /\AINADDR_/
  42. make_value = "UINT2NUM"
  43. else
  44. make_value = "INT2NUM"
  45. end
  46. guard = nil
  47. if /\A(AF_INET6|PF_INET6|IPV6_.*)\z/ =~ name
  48. # IPv6 is not supported although AF_INET6 is defined on bcc32/mingw
  49. guard = "defined(INET6)"
  50. end
  51. yield guard, make_value, name, default_value
  52. }
  53. end
  54. def each_name(pat)
  55. DEFS.each {|name, default_value|
  56. next if pat !~ name
  57. yield name
  58. }
  59. end
  60. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_decls")
  61. % each_const {|guard, make_value, name, default_value|
  62. % if default_value
  63. #ifndef <%=name%>
  64. # define <%=name%> <%=default_value%>
  65. #endif
  66. % end
  67. % }
  68. EOS
  69. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs_in_guard(make_value, name, default_value)")
  70. #if defined(<%=name%>)
  71. rb_define_const(rb_cSocket, <%=c_str name%>, <%=make_value%>(<%=name%>));
  72. rb_define_const(rb_mSockConst, <%=c_str name%>, <%=make_value%>(<%=name%>));
  73. #endif
  74. EOS
  75. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs")
  76. % each_const {|guard, make_value, name, default_value|
  77. % if guard
  78. #if <%=guard%>
  79. <%= gen_const_defs_in_guard(make_value, name, default_value).chomp %>
  80. #endif
  81. % else
  82. <%= gen_const_defs_in_guard(make_value, name, default_value).chomp %>
  83. % end
  84. % }
  85. EOS
  86. def reverse_each_name(pat)
  87. DEFS.reverse_each {|name, default_value|
  88. next if pat !~ name
  89. yield name
  90. }
  91. end
  92. def each_names_with_len(pat, prefix_optional=nil)
  93. h = {}
  94. DEFS.each {|name, default_value|
  95. next if pat !~ name
  96. (h[name.length] ||= []) << [name, name]
  97. }
  98. if prefix_optional
  99. if Regexp === prefix_optional
  100. prefix_pat = prefix_optional
  101. else
  102. prefix_pat = /\A#{Regexp.escape prefix_optional}/
  103. end
  104. DEFS.each {|const, default_value|
  105. next if pat !~ const
  106. next if prefix_pat !~ const
  107. name = $'
  108. (h[name.length] ||= []) << [name, const]
  109. }
  110. end
  111. hh = {}
  112. h.each {|len, pairs|
  113. pairs.each {|name, const|
  114. raise "name crash: #{name}" if hh[name]
  115. hh[name] = true
  116. }
  117. }
  118. h.keys.sort.each {|len|
  119. yield h[len], len
  120. }
  121. end
  122. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_decl(funcname, pat, prefix_optional, guard=nil)")
  123. %if guard
  124. #ifdef <%=guard%>
  125. int <%=funcname%>(const char *str, int len, int *valp);
  126. #endif
  127. %else
  128. int <%=funcname%>(const char *str, int len, int *valp);
  129. %end
  130. EOS
  131. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard=nil)")
  132. int
  133. <%=funcname%>(const char *str, int len, int *valp)
  134. {
  135. switch (len) {
  136. % each_names_with_len(pat, prefix_optional) {|pairs, len|
  137. case <%=len%>:
  138. % pairs.each {|name, const|
  139. #ifdef <%=const%>
  140. if (memcmp(str, <%=c_str name%>, <%=len%>) == 0) { *valp = <%=const%>; return 0; }
  141. #endif
  142. % }
  143. return -1;
  144. % }
  145. default:
  146. return -1;
  147. }
  148. }
  149. EOS
  150. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func(funcname, pat, prefix_optional, guard=nil)")
  151. %if guard
  152. #ifdef <%=guard%>
  153. <%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%>
  154. #endif
  155. %else
  156. <%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%>
  157. %end
  158. EOS
  159. NAME_TO_INT_DEFS = []
  160. def def_name_to_int(funcname, pat, prefix_optional, guard=nil)
  161. decl = gen_name_to_int_decl(funcname, pat, prefix_optional, guard)
  162. func = gen_name_to_int_func(funcname, pat, prefix_optional, guard)
  163. NAME_TO_INT_DEFS << [decl, func]
  164. end
  165. def reverse_each_name_with_prefix_optional(pat, prefix_pat)
  166. reverse_each_name(pat) {|n|
  167. yield n, n
  168. }
  169. if prefix_pat
  170. reverse_each_name(pat) {|n|
  171. next if prefix_pat !~ n
  172. yield n, $'
  173. }
  174. end
  175. end
  176. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)")
  177. <%=hash_var%> = st_init_numtable();
  178. % reverse_each_name_with_prefix_optional(pat, prefix_pat) {|n,s|
  179. #ifdef <%=n%>
  180. st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)rb_intern2(<%=c_str s%>, <%=s.length%>));
  181. #endif
  182. % }
  183. EOS
  184. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_func(func_name, hash_var)")
  185. ID
  186. <%=func_name%>(int val)
  187. {
  188. st_data_t name;
  189. if (st_lookup(<%=hash_var%>, (st_data_t)val, &name))
  190. return (ID)name;
  191. return 0;
  192. }
  193. EOS
  194. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_decl(func_name, hash_var)")
  195. ID <%=func_name%>(int val);
  196. EOS
  197. INTERN_DEFS = []
  198. def def_intern(func_name, pat, prefix_optional=nil)
  199. prefix_pat = nil
  200. if prefix_optional
  201. if Regexp === prefix_optional
  202. prefix_pat = prefix_optional
  203. else
  204. prefix_pat = /\A#{Regexp.escape prefix_optional}/
  205. end
  206. end
  207. hash_var = "#{func_name}_hash"
  208. vardef = "static st_table *#{hash_var};"
  209. gen_hash = gen_int_to_name_hash(hash_var, pat, prefix_pat)
  210. decl = gen_int_to_name_decl(func_name, hash_var)
  211. func = gen_int_to_name_func(func_name, hash_var)
  212. INTERN_DEFS << [vardef, gen_hash, decl, func]
  213. end
  214. def_name_to_int("rsock_family_to_int", /\A(AF_|PF_)/, "AF_")
  215. def_name_to_int("rsock_socktype_to_int", /\ASOCK_/, "SOCK_")
  216. def_name_to_int("rsock_ipproto_to_int", /\AIPPROTO_/, "IPPROTO_")
  217. def_name_to_int("rsock_unknown_level_to_int", /\ASOL_SOCKET\z/, "SOL_")
  218. def_name_to_int("rsock_ip_level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/)
  219. def_name_to_int("rsock_so_optname_to_int", /\ASO_/, "SO_")
  220. def_name_to_int("rsock_ip_optname_to_int", /\AIP_/, "IP_")
  221. def_name_to_int("rsock_ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6")
  222. def_name_to_int("rsock_tcp_optname_to_int", /\ATCP_/, "TCP_")
  223. def_name_to_int("rsock_udp_optname_to_int", /\AUDP_/, "UDP_")
  224. def_name_to_int("rsock_shutdown_how_to_int", /\ASHUT_/, "SHUT_")
  225. def_name_to_int("rsock_scm_optname_to_int", /\ASCM_/, "SCM_")
  226. def_intern('rsock_intern_family', /\AAF_/)
  227. def_intern('rsock_intern_family_noprefix', /\AAF_/, "AF_")
  228. def_intern('rsock_intern_protocol_family', /\APF_/)
  229. def_intern('rsock_intern_socktype', /\ASOCK_/)
  230. def_intern('rsock_intern_ipproto', /\AIPPROTO_/)
  231. def_intern('rsock_intern_iplevel', /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/)
  232. def_intern('rsock_intern_so_optname', /\ASO_/, "SO_")
  233. def_intern('rsock_intern_ip_optname', /\AIP_/, "IP_")
  234. def_intern('rsock_intern_ipv6_optname', /\AIPV6_/, "IPV6_")
  235. def_intern('rsock_intern_tcp_optname', /\ATCP_/, "TCP_")
  236. def_intern('rsock_intern_udp_optname', /\AUDP_/, "UDP_")
  237. def_intern('rsock_intern_scm_optname', /\ASCM_/, "SCM_")
  238. def_intern('rsock_intern_local_optname', /\ALOCAL_/, "LOCAL_")
  239. result = ERB.new(<<'EOS', nil, '%').result(binding)
  240. /* autogenerated file */
  241. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| vardef }.join("\n") %>
  242. static void
  243. init_constants(void)
  244. {
  245. /* for rdoc */
  246. /* rb_cSocket = rb_define_class("Socket", rb_cBasicSocket); */
  247. /* rb_mSockConst = rb_define_module_under(rb_cSocket, "Constants"); */
  248. <%= gen_const_defs %>
  249. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| gen_hash }.join("\n") %>
  250. }
  251. <%= NAME_TO_INT_DEFS.map {|decl, func| func }.join("\n") %>
  252. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| func }.join("\n") %>
  253. EOS
  254. header_result = ERB.new(<<'EOS', nil, '%').result(binding)
  255. /* autogenerated file */
  256. <%= gen_const_decls %>
  257. <%= NAME_TO_INT_DEFS.map {|decl, func| decl }.join("\n") %>
  258. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| decl }.join("\n") %>
  259. EOS
  260. if opt_H
  261. File.open(opt_H, 'w') {|f|
  262. f << header_result
  263. }
  264. else
  265. result = header_result + result
  266. end
  267. if opt_o
  268. File.open(opt_o, 'w') {|f|
  269. f << result
  270. }
  271. else
  272. $stdout << result
  273. end
  274. __END__
  275. SOCK_STREAM
  276. SOCK_DGRAM
  277. SOCK_RAW
  278. SOCK_RDM
  279. SOCK_SEQPACKET
  280. SOCK_PACKET
  281. AF_UNSPEC
  282. PF_UNSPEC
  283. AF_INET
  284. PF_INET
  285. AF_INET6
  286. PF_INET6
  287. AF_UNIX
  288. PF_UNIX
  289. AF_AX25
  290. PF_AX25
  291. AF_IPX
  292. PF_IPX
  293. AF_APPLETALK
  294. PF_APPLETALK
  295. AF_LOCAL
  296. PF_LOCAL
  297. AF_IMPLINK
  298. PF_IMPLINK
  299. AF_PUP
  300. PF_PUP
  301. AF_CHAOS
  302. PF_CHAOS
  303. AF_NS
  304. PF_NS
  305. AF_ISO
  306. PF_ISO
  307. AF_OSI
  308. PF_OSI
  309. AF_ECMA
  310. PF_ECMA
  311. AF_DATAKIT
  312. PF_DATAKIT
  313. AF_CCITT
  314. PF_CCITT
  315. AF_SNA
  316. PF_SNA
  317. AF_DEC
  318. PF_DEC
  319. AF_DLI
  320. PF_DLI
  321. AF_LAT
  322. PF_LAT
  323. AF_HYLINK
  324. PF_HYLINK
  325. AF_ROUTE
  326. PF_ROUTE
  327. AF_LINK
  328. PF_LINK
  329. AF_COIP
  330. PF_COIP
  331. AF_CNT
  332. PF_CNT
  333. AF_SIP
  334. PF_SIP
  335. AF_NDRV
  336. PF_NDRV
  337. AF_ISDN
  338. PF_ISDN
  339. AF_NATM
  340. PF_NATM
  341. AF_SYSTEM
  342. PF_SYSTEM
  343. AF_NETBIOS
  344. PF_NETBIOS
  345. AF_PPP
  346. PF_PPP
  347. AF_ATM
  348. PF_ATM
  349. AF_NETGRAPH
  350. PF_NETGRAPH
  351. AF_MAX
  352. PF_MAX
  353. AF_PACKET
  354. PF_PACKET
  355. AF_E164
  356. PF_XTP
  357. PF_RTIP
  358. PF_PIP
  359. PF_KEY
  360. MSG_OOB
  361. MSG_PEEK
  362. MSG_DONTROUTE
  363. MSG_EOR
  364. MSG_TRUNC
  365. MSG_CTRUNC
  366. MSG_WAITALL
  367. MSG_DONTWAIT
  368. MSG_EOF
  369. MSG_FLUSH
  370. MSG_HOLD
  371. MSG_SEND
  372. MSG_HAVEMORE
  373. MSG_RCVMORE
  374. MSG_COMPAT
  375. MSG_PROXY
  376. MSG_FIN
  377. MSG_SYN
  378. MSG_CONFIRM
  379. MSG_RST
  380. MSG_ERRQUEUE
  381. MSG_NOSIGNAL
  382. MSG_MORE
  383. SOL_SOCKET
  384. SOL_IP
  385. SOL_IPX
  386. SOL_AX25
  387. SOL_ATALK
  388. SOL_TCP
  389. SOL_UDP
  390. IPPROTO_IP 0
  391. IPPROTO_ICMP 1
  392. IPPROTO_IGMP
  393. IPPROTO_GGP
  394. IPPROTO_TCP 6
  395. IPPROTO_EGP
  396. IPPROTO_PUP
  397. IPPROTO_UDP 17
  398. IPPROTO_IDP
  399. IPPROTO_HELLO
  400. IPPROTO_ND
  401. IPPROTO_TP
  402. IPPROTO_XTP
  403. IPPROTO_EON
  404. IPPROTO_BIP
  405. IPPROTO_AH
  406. IPPROTO_DSTOPTS
  407. IPPROTO_ESP
  408. IPPROTO_FRAGMENT
  409. IPPROTO_HOPOPTS
  410. IPPROTO_ICMPV6
  411. IPPROTO_IPV6
  412. IPPROTO_NONE
  413. IPPROTO_ROUTING
  414. IPPROTO_RAW 255
  415. IPPROTO_MAX
  416. # Some port configuration
  417. IPPORT_RESERVED 1024
  418. IPPORT_USERRESERVED 5000
  419. # Some reserved IP v.4 addresses
  420. INADDR_ANY 0x00000000
  421. INADDR_BROADCAST 0xffffffff
  422. INADDR_LOOPBACK 0x7F000001
  423. INADDR_UNSPEC_GROUP 0xe0000000
  424. INADDR_ALLHOSTS_GROUP 0xe0000001
  425. INADDR_MAX_LOCAL_GROUP 0xe00000ff
  426. INADDR_NONE 0xffffffff
  427. # IP [gs]etsockopt options
  428. IP_OPTIONS
  429. IP_HDRINCL
  430. IP_TOS
  431. IP_TTL
  432. IP_RECVOPTS
  433. IP_RECVRETOPTS
  434. IP_RECVDSTADDR
  435. IP_RETOPTS
  436. IP_MINTTL
  437. IP_DONTFRAG
  438. IP_SENDSRCADDR
  439. IP_ONESBCAST
  440. IP_RECVTTL
  441. IP_RECVIF
  442. IP_RECVSLLA
  443. IP_PORTRANGE
  444. IP_MULTICAST_IF
  445. IP_MULTICAST_TTL
  446. IP_MULTICAST_LOOP
  447. IP_ADD_MEMBERSHIP
  448. IP_DROP_MEMBERSHIP
  449. IP_DEFAULT_MULTICAST_TTL
  450. IP_DEFAULT_MULTICAST_LOOP
  451. IP_MAX_MEMBERSHIPS
  452. IP_ROUTER_ALERT
  453. IP_PKTINFO
  454. IP_PKTOPTIONS
  455. IP_MTU_DISCOVER
  456. IP_RECVERR
  457. IP_RECVTOS
  458. IP_MTU
  459. IP_FREEBIND
  460. IP_IPSEC_POLICY
  461. IP_XFRM_POLICY
  462. IP_PASSSEC
  463. IP_PMTUDISC_DONT
  464. IP_PMTUDISC_WANT
  465. IP_PMTUDISC_DO
  466. IP_UNBLOCK_SOURCE
  467. IP_BLOCK_SOURCE
  468. IP_ADD_SOURCE_MEMBERSHIP
  469. IP_DROP_SOURCE_MEMBERSHIP
  470. IP_MSFILTER
  471. MCAST_JOIN_GROUP
  472. MCAST_BLOCK_SOURCE
  473. MCAST_UNBLOCK_SOURCE
  474. MCAST_LEAVE_GROUP
  475. MCAST_JOIN_SOURCE_GROUP
  476. MCAST_LEAVE_SOURCE_GROUP
  477. MCAST_MSFILTER
  478. MCAST_EXCLUDE
  479. MCAST_INCLUDE
  480. SO_DEBUG
  481. SO_REUSEADDR
  482. SO_REUSEPORT
  483. SO_TYPE
  484. SO_ERROR
  485. SO_DONTROUTE
  486. SO_BROADCAST
  487. SO_SNDBUF
  488. SO_RCVBUF
  489. SO_KEEPALIVE
  490. SO_OOBINLINE
  491. SO_NO_CHECK
  492. SO_PRIORITY
  493. SO_LINGER
  494. SO_PASSCRED
  495. SO_PEERCRED
  496. SO_RCVLOWAT
  497. SO_SNDLOWAT
  498. SO_RCVTIMEO
  499. SO_SNDTIMEO
  500. SO_ACCEPTCONN
  501. SO_USELOOPBACK
  502. SO_ACCEPTFILTER
  503. SO_DONTTRUNC
  504. SO_WANTMORE
  505. SO_WANTOOBFLAG
  506. SO_NREAD
  507. SO_NKE
  508. SO_NOSIGPIPE
  509. SO_SECURITY_AUTHENTICATION
  510. SO_SECURITY_ENCRYPTION_TRANSPORT
  511. SO_SECURITY_ENCRYPTION_NETWORK
  512. SO_BINDTODEVICE
  513. SO_ATTACH_FILTER
  514. SO_DETACH_FILTER
  515. SO_PEERNAME
  516. SO_TIMESTAMP
  517. SO_TIMESTAMPNS
  518. SO_BINTIME
  519. SO_RECVUCRED
  520. SO_MAC_EXEMPT
  521. SO_ALLZONES
  522. SOPRI_INTERACTIVE
  523. SOPRI_NORMAL
  524. SOPRI_BACKGROUND
  525. IPX_TYPE
  526. TCP_NODELAY
  527. TCP_MAXSEG
  528. TCP_CORK
  529. TCP_DEFER_ACCEPT
  530. TCP_INFO
  531. TCP_KEEPCNT
  532. TCP_KEEPIDLE
  533. TCP_KEEPINTVL
  534. TCP_LINGER2
  535. TCP_MD5SIG
  536. TCP_NOOPT
  537. TCP_NOPUSH
  538. TCP_QUICKACK
  539. TCP_SYNCNT
  540. TCP_WINDOW_CLAMP
  541. UDP_CORK
  542. EAI_ADDRFAMILY
  543. EAI_AGAIN
  544. EAI_BADFLAGS
  545. EAI_FAIL
  546. EAI_FAMILY
  547. EAI_MEMORY
  548. EAI_NODATA
  549. EAI_NONAME
  550. EAI_OVERFLOW
  551. EAI_SERVICE
  552. EAI_SOCKTYPE
  553. EAI_SYSTEM
  554. EAI_BADHINTS
  555. EAI_PROTOCOL
  556. EAI_MAX
  557. AI_PASSIVE
  558. AI_CANONNAME
  559. AI_NUMERICHOST
  560. AI_NUMERICSERV
  561. AI_MASK
  562. AI_ALL
  563. AI_V4MAPPED_CFG
  564. AI_ADDRCONFIG
  565. AI_V4MAPPED
  566. AI_DEFAULT
  567. NI_MAXHOST
  568. NI_MAXSERV
  569. NI_NOFQDN
  570. NI_NUMERICHOST
  571. NI_NAMEREQD
  572. NI_NUMERICSERV
  573. NI_DGRAM
  574. SHUT_RD 0
  575. SHUT_WR 1
  576. SHUT_RDWR 2
  577. IPV6_JOIN_GROUP
  578. IPV6_LEAVE_GROUP
  579. IPV6_MULTICAST_HOPS
  580. IPV6_MULTICAST_IF
  581. IPV6_MULTICAST_LOOP
  582. IPV6_UNICAST_HOPS
  583. IPV6_V6ONLY
  584. IPV6_CHECKSUM
  585. IPV6_DONTFRAG
  586. IPV6_DSTOPTS
  587. IPV6_HOPLIMIT
  588. IPV6_HOPOPTS
  589. IPV6_NEXTHOP
  590. IPV6_PATHMTU
  591. IPV6_PKTINFO
  592. IPV6_RECVDSTOPTS
  593. IPV6_RECVHOPLIMIT
  594. IPV6_RECVHOPOPTS
  595. IPV6_RECVPKTINFO
  596. IPV6_RECVRTHDR
  597. IPV6_RECVTCLASS
  598. IPV6_RTHDR
  599. IPV6_RTHDRDSTOPTS
  600. IPV6_RTHDR_TYPE_0
  601. IPV6_RECVPATHMTU
  602. IPV6_TCLASS
  603. IPV6_USE_MIN_MTU
  604. INET_ADDRSTRLEN
  605. INET6_ADDRSTRLEN
  606. IFNAMSIZ
  607. SOMAXCONN
  608. SCM_RIGHTS
  609. SCM_TIMESTAMP
  610. SCM_TIMESTAMPNS
  611. SCM_BINTIME
  612. SCM_CREDENTIALS
  613. SCM_CREDS
  614. SCM_UCRED
  615. LOCAL_PEERCRED
  616. LOCAL_CREDS
  617. LOCAL_CONNWAIT