I've discussed the kernel side for "Y2038-incompatible socket timestamping" with Deep a while ago, and I think we came to a new conclusions for what would be the best approach. I'll let her comment here.
There is a small error in the way SO_TIMESTAMPING is described below:
SO_TIMESTAMPING uses an integer bitfield which is not sensitive to time bit-size.
SO_TIMESTAMPING uses the below struct as its cmsg data: struct scm_timestamping { struct timespec ts[3]; };
Timestamp options can also be differentiated based on the length argument in the cmsg. But, like the timeout options, since we do not want to rely on the lengths of the data, we agree that all the timestamping options will have 64 bit time_t versions like you mention.
Kernel will use a macro that Arnd suggested:
#define SO_TIMESTAMPNS ((sizeof(time_t) > sizeof(__kernel_long_t)) ? SO_TIMESTAMPNS64 : SO_TIMESTAMPNS32)
Your comments on SO_RCVTIMEO and SO_SNDTIMEO are consistent with what we had agreed upon before.
-Deepa