../
// getsockopt的隐藏功能
#import "/template.typ":doc-template

#doc-template(
title: "getsockopt的隐藏功能",
date: "2023年1月28日",
body: [

在排查网络问题的时候,有个很常见的需求是获取到TCP连接的信息,例如传输了多少数据、重传率、ACK延迟等等。虽然一些简单的统计功能可以自己实现,例如可以在所有的 send和recv处都加上记录函数以统计收发的字节数。但是这种方式终究还是不太优雅。如果用eBPF,又会难免会涉及到内核态,很麻烦。所以,如果不需要考虑其他类UNIX系统的可移植性的话,可以用Linux的专有接口。

= 接口

```
int getsockopt(int sockfd, int level, int optname,
               void *restrict optval, socklen_t *restrict optlen);
```

需要获取TCP连接信息的时候,level

...

Email: i (at) mistivia (dot) com