ソケット(Socket)
この記事は以下の書籍を参考にしています。
『Software Design [別冊] Linux ブートキャンプ』(p101)
ソケット は具体的には ソケットファイル です。
ソケットファイルを確認
lsof -P -n -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 1382 root 4u IPv4 30221 0t0 TCP *:8000 (LISTEN)
docker-pr 1388 root 4u IPv6 30230 0t0 TCP *:8000 (LISTEN)
LISTEN している PID を調べます。
↑で調べた PID の FD は /proc/1382/fd ディレクトリに格納されています。
ls -al /proc/1382/fd
total 0
dr-x------ 2 root root 0 Jul 16 16:48 ./
dr-xr-xr-x 9 root root 0 Jul 16 16:48 ../
......
l-wx------ 1 root root 64 Jul 16 16:48 2 -> /dev/null
lrwx------ 1 root root 64 Jul 16 16:48 4 -> 'socket:[30221]'
lrwx------ 1 root root 64 Jul 16 16:48 6 -> 'anon_inode:[eventpoll]'
......
上記の 4 -> 'socket:[30221]' が示す inode 番号(30221)を /proc/net/tcp(または /proc/1382/net/tcp )の内容と照合すると、そのソケットが使用しているローカルアドレス・ポートおよび接続状態を確認できます。
つまりソケットの実体そのものがこのファイルというわけではなく、/proc/net/tcp はカーネルが管理するソケット一覧を inode 番号で参照できる形で公開しているものです。
ref.
- https://christina04.hatenablog.com/entry/socket-base
- https://blog.1q77.com/2020/10/socket-in-proc-pid-fd/?utm_source=pocket_mylist
システムコール
代表的なシステムコールは以下のとおりです。
- socket
- bind
- listen
- connect
- accept
- read
- write
システムコールは以下を参照してください。
SYSCALLS