1 #include <sys/socket.h>
6 int getsockopt(int fd
, int level
, int optname
, void *restrict optval
, socklen_t
*restrict optlen
)
11 int r
= __socketcall(getsockopt
, fd
, level
, optname
, optval
, optlen
, 0);
13 if (r
==-ENOPROTOOPT
) switch (level
) {
18 if (SO_RCVTIMEO
== SO_RCVTIMEO_OLD
) break;
19 if (*optlen
< sizeof *tv
) return __syscall_ret(-EINVAL
);
20 if (optname
==SO_RCVTIMEO
) optname
=SO_RCVTIMEO_OLD
;
21 if (optname
==SO_SNDTIMEO
) optname
=SO_SNDTIMEO_OLD
;
22 r
= __socketcall(getsockopt
, fd
, level
, optname
,
23 tv32
, (socklen_t
[]){sizeof tv32
}, 0);
27 tv
->tv_usec
= tv32
[1];
32 if (SO_TIMESTAMP
== SO_TIMESTAMP_OLD
) break;
33 if (optname
==SO_TIMESTAMP
) optname
=SO_TIMESTAMP_OLD
;
34 if (optname
==SO_TIMESTAMPNS
) optname
=SO_TIMESTAMPNS_OLD
;
35 r
= __socketcall(getsockopt
, fd
, level
,
36 optname
, optval
, optlen
, 0);
40 return __syscall_ret(r
);