Commit 4550653
committed
Add SO_TIMESTAMP support for datagram channels
Motivation:
NIO supports ECN, packet info, and segmentation metadata but not timestamps. Userspace timestamps are imprecise due to scheduler latency between packet arrival and recvmsg. SO_TIMESTAMP captures the exact kernel receive time with microsecond precision via control messages, which is critical for accurate RTT measurements and latency monitoring.
Modifications:
- Add timestamp field to AddressedEnvelope.Metadata
- Add TimestampOption channel option
- Parse SCM_TIMESTAMP control messages in ControlMessageParser
- Add init(ecnState:packetInfo:segmentSize:timestamp:) to Metadata
- Add test coverage
Result:
Datagram channels can enable .receiveTimestamp to receive kernel timestamps in AddressedEnvelope.Metadata.timestamp as a Double (seconds since epoch with microsecond precision).1 parent c329d1e commit 4550653
File tree
5 files changed
+110
-10
lines changed- Sources
- NIOCore
- NIOPosix
- Tests/NIOPosixTests
5 files changed
+110
-10
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
53 | 60 | | |
54 | 61 | | |
55 | 62 | | |
| |||
71 | 78 | | |
72 | 79 | | |
73 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
74 | 93 | | |
75 | 94 | | |
76 | 95 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
236 | 236 | | |
237 | 237 | | |
238 | 238 | | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
239 | 245 | | |
240 | 246 | | |
241 | 247 | | |
| |||
379 | 385 | | |
380 | 386 | | |
381 | 387 | | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
382 | 391 | | |
383 | 392 | | |
384 | 393 | | |
| |||
477 | 486 | | |
478 | 487 | | |
479 | 488 | | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
480 | 494 | | |
481 | 495 | | |
482 | 496 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
| 204 | + | |
204 | 205 | | |
205 | 206 | | |
206 | 207 | | |
| |||
231 | 232 | | |
232 | 233 | | |
233 | 234 | | |
| 235 | + | |
| 236 | + | |
234 | 237 | | |
235 | 238 | | |
236 | 239 | | |
| |||
292 | 295 | | |
293 | 296 | | |
294 | 297 | | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
295 | 307 | | |
296 | 308 | | |
297 | 309 | | |
| |||
437 | 449 | | |
438 | 450 | | |
439 | 451 | | |
440 | | - | |
| 452 | + | |
| 453 | + | |
441 | 454 | | |
442 | 455 | | |
443 | 456 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
475 | 475 | | |
476 | 476 | | |
477 | 477 | | |
| 478 | + | |
478 | 479 | | |
479 | 480 | | |
480 | 481 | | |
| |||
647 | 648 | | |
648 | 649 | | |
649 | 650 | | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
650 | 659 | | |
651 | 660 | | |
652 | 661 | | |
| |||
727 | 736 | | |
728 | 737 | | |
729 | 738 | | |
| 739 | + | |
| 740 | + | |
730 | 741 | | |
731 | 742 | | |
732 | 743 | | |
| |||
771 | 782 | | |
772 | 783 | | |
773 | 784 | | |
774 | | - | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
775 | 788 | | |
776 | 789 | | |
777 | 790 | | |
| |||
816 | 829 | | |
817 | 830 | | |
818 | 831 | | |
819 | | - | |
| 832 | + | |
| 833 | + | |
820 | 834 | | |
821 | 835 | | |
822 | 836 | | |
| |||
861 | 875 | | |
862 | 876 | | |
863 | 877 | | |
864 | | - | |
| 878 | + | |
865 | 879 | | |
866 | 880 | | |
867 | 881 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1071 | 1071 | | |
1072 | 1072 | | |
1073 | 1073 | | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
1074 | 1114 | | |
1075 | 1115 | | |
1076 | 1116 | | |
| |||
1886 | 1926 | | |
1887 | 1927 | | |
1888 | 1928 | | |
1889 | | - | |
| 1929 | + | |
1890 | 1930 | | |
1891 | 1931 | | |
1892 | 1932 | | |
| |||
1936 | 1976 | | |
1937 | 1977 | | |
1938 | 1978 | | |
1939 | | - | |
| 1979 | + | |
1940 | 1980 | | |
1941 | 1981 | | |
1942 | 1982 | | |
1943 | 1983 | | |
1944 | | - | |
| 1984 | + | |
1945 | 1985 | | |
1946 | 1986 | | |
1947 | 1987 | | |
| |||
1969 | 2009 | | |
1970 | 2010 | | |
1971 | 2011 | | |
1972 | | - | |
| 2012 | + | |
1973 | 2013 | | |
1974 | 2014 | | |
1975 | 2015 | | |
| |||
2010 | 2050 | | |
2011 | 2051 | | |
2012 | 2052 | | |
2013 | | - | |
| 2053 | + | |
2014 | 2054 | | |
2015 | 2055 | | |
2016 | 2056 | | |
| |||
2033 | 2073 | | |
2034 | 2074 | | |
2035 | 2075 | | |
2036 | | - | |
| 2076 | + | |
2037 | 2077 | | |
2038 | 2078 | | |
2039 | 2079 | | |
| |||
0 commit comments