1. 개요
쿠버네티스 네트워킹 구현을 이해하기 위해서는 리눅스 네트워킹 기초를 이해할 필요가 있음.
쿠버네티스가 본질적으로 리눅스 시스템에서 동작하는 도구이기 때문
2. Go 웹 서버 실행
# amazon liunx 2023
# git 명령어 설치
sudo dnf install git -y
git --version
더보기
[ec2-user@ip-10-0-3-220 ~]$ sudo dnf install git -y
Amazon Linux 2023 Kernel Livepatch repository 63 kB/s | 11 kB 00:00
Dependencies resolved.
================================================================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================================================================
Installing:
git x86_64 2.40.1-1.amzn2023.0.3 amazonlinux 54 k
Installing dependencies:
git-core x86_64 2.40.1-1.amzn2023.0.3 amazonlinux 4.3 M
git-core-doc noarch 2.40.1-1.amzn2023.0.3 amazonlinux 2.6 M
perl-Error noarch 1:0.17029-5.amzn2023.0.2 amazonlinux 41 k
perl-File-Find noarch 1.37-477.amzn2023.0.6 amazonlinux 26 k
perl-Git noarch 2.40.1-1.amzn2023.0.3 amazonlinux 42 k
perl-TermReadKey x86_64 2.38-9.amzn2023.0.2 amazonlinux 36 k
perl-lib x86_64 0.65-477.amzn2023.0.6 amazonlinux 15 k
Transaction Summary
================================================================================================================================================================================================================
Install 8 Packages
Total download size: 7.1 M
Installed size: 34 M
Downloading Packages:
(1/8): git-2.40.1-1.amzn2023.0.3.x86_64.rpm 1.0 MB/s | 54 kB 00:00
(2/8): perl-Error-0.17029-5.amzn2023.0.2.noarch.rpm 1.2 MB/s | 41 kB 00:00
(3/8): perl-File-Find-1.37-477.amzn2023.0.6.noarch.rpm 937 kB/s | 26 kB 00:00
(4/8): perl-Git-2.40.1-1.amzn2023.0.3.noarch.rpm 1.7 MB/s | 42 kB 00:00
(5/8): git-core-2.40.1-1.amzn2023.0.3.x86_64.rpm 26 MB/s | 4.3 MB 00:00
(6/8): perl-TermReadKey-2.38-9.amzn2023.0.2.x86_64.rpm 1.4 MB/s | 36 kB 00:00
(7/8): perl-lib-0.65-477.amzn2023.0.6.x86_64.rpm 739 kB/s | 15 kB 00:00
(8/8): git-core-doc-2.40.1-1.amzn2023.0.3.noarch.rpm 12 MB/s | 2.6 MB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 26 MB/s | 7.1 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : git-core-2.40.1-1.amzn2023.0.3.x86_64 1/8
Installing : git-core-doc-2.40.1-1.amzn2023.0.3.noarch 2/8
Installing : perl-lib-0.65-477.amzn2023.0.6.x86_64 3/8
Installing : perl-TermReadKey-2.38-9.amzn2023.0.2.x86_64 4/8
Installing : perl-File-Find-1.37-477.amzn2023.0.6.noarch 5/8
Installing : perl-Error-1:0.17029-5.amzn2023.0.2.noarch 6/8
Installing : perl-Git-2.40.1-1.amzn2023.0.3.noarch 7/8
Installing : git-2.40.1-1.amzn2023.0.3.x86_64 8/8
Running scriptlet: git-2.40.1-1.amzn2023.0.3.x86_64 8/8
Verifying : git-2.40.1-1.amzn2023.0.3.x86_64 1/8
Verifying : git-core-2.40.1-1.amzn2023.0.3.x86_64 2/8
Verifying : git-core-doc-2.40.1-1.amzn2023.0.3.noarch 3/8
Verifying : perl-Error-1:0.17029-5.amzn2023.0.2.noarch 4/8
Verifying : perl-File-Find-1.37-477.amzn2023.0.6.noarch 5/8
Verifying : perl-Git-2.40.1-1.amzn2023.0.3.noarch 6/8
Verifying : perl-TermReadKey-2.38-9.amzn2023.0.2.x86_64 7/8
Verifying : perl-lib-0.65-477.amzn2023.0.6.x86_64 8/8
Installed:
git-2.40.1-1.amzn2023.0.3.x86_64 git-core-2.40.1-1.amzn2023.0.3.x86_64 git-core-doc-2.40.1-1.amzn2023.0.3.noarch perl-Error-1:0.17029-5.amzn2023.0.2.noarch
perl-File-Find-1.37-477.amzn2023.0.6.noarch perl-Git-2.40.1-1.amzn2023.0.3.noarch perl-TermReadKey-2.38-9.amzn2023.0.2.x86_64 perl-lib-0.65-477.amzn2023.0.6.x86_64
Complete!
[ec2-user@ip-10-0-3-220 ~]$ git --version
git version 2.40.1
# 실습 코드 git clone
git clone https://github.com/strongjz/Networking-and-Kubernetes.git
더보기
[ec2-user@ip-10-0-3-220 ~]$ gh repo clone strongjz/Networking-and-Kubernetes
-bash: gh: command not found
[ec2-user@ip-10-0-3-220 ~]$ git clone https://github.com/strongjz/Networking-and-Kubernetes.git
Cloning into 'Networking-and-Kubernetes'...
remote: Enumerating objects: 266, done.
remote: Counting objects: 100% (266/266), done.
remote: Compressing objects: 100% (181/181), done.
remote: Total 266 (delta 104), reused 207 (delta 53), pack-reused 0 (from 0)
Receiving objects: 100% (266/266), 4.20 MiB | 39.82 MiB/s, done.
Resolving deltas: 100% (104/104), done.
[ec2-user@ip-10-0-3-220 ~]$ ls
Networking-and-Kubernetes
[ec2-user@ip-10-0-3-220 ~]$ cd Networking-and-Kubernetes/
[ec2-user@ip-10-0-3-220 Networking-and-Kubernetes]$ ls -al
total 40
drwxr-xr-x. 9 ec2-user ec2-user 155 Jan 7 05:06 .
drwx------. 4 ec2-user ec2-user 107 Jan 7 05:06 ..
drwxr-xr-x. 8 ec2-user ec2-user 163 Jan 7 05:06 .git
-rw-r--r--. 1 ec2-user ec2-user 305 Jan 7 05:06 .gitignore
-rw-r--r--. 1 ec2-user ec2-user 447 Jan 7 05:06 README.md
drwxr-xr-x. 3 ec2-user ec2-user 59 Jan 7 05:06 chapter-1
drwxr-xr-x. 2 ec2-user ec2-user 23 Jan 7 05:06 chapter-2
drwxr-xr-x. 4 ec2-user ec2-user 106 Jan 7 05:06 chapter-3
drwxr-xr-x. 2 ec2-user ec2-user 16384 Jan 7 05:06 chapter-4
drwxr-xr-x. 2 ec2-user ec2-user 16384 Jan 7 05:06 chapter-5
drwxr-xr-x. 3 ec2-user ec2-user 34 Jan 7 05:06 chapter-6
[ec2-user@ip-10-0-3-220 Networking-and-Kubernetes]$
# Amazon Linux 2023 - Go 설치
sudo dnf install golang -y
go version
더보기
[ec2-user@ip-10-0-3-220 chapter-1]$ sudo dnf install golang -y
Last metadata expiration check: 0:05:40 ago on Tue Jan 7 05:03:50 2025.
Dependencies resolved.
================================================================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================================================================
Installing:
golang x86_64 1.22.7-1.amzn2023.0.1 amazonlinux 661 k
Installing dependencies:
annobin-docs noarch 10.93-1.amzn2023.0.1 amazonlinux 92 k
annobin-plugin-gcc x86_64 10.93-1.amzn2023.0.1 amazonlinux 887 k
apr x86_64 1.7.5-1.amzn2023.0.2 amazonlinux 130 k
apr-util x86_64 1.6.3-1.amzn2023.0.1 amazonlinux 98 k
cpp x86_64 11.4.1-2.amzn2023.0.2 amazonlinux 10 M
emacs-filesystem noarch 1:28.2-3.amzn2023.0.8 amazonlinux 10 k
gc x86_64 8.0.4-5.amzn2023.0.2 amazonlinux 105 k
gcc x86_64 11.4.1-2.amzn2023.0.2 amazonlinux 32 M
glibc-devel x86_64 2.34-117.amzn2023.0.1 amazonlinux 33 k
glibc-headers-x86 noarch 2.34-117.amzn2023.0.1 amazonlinux 434 k
golang-bin x86_64 1.22.7-1.amzn2023.0.1 amazonlinux 26 M
golang-src noarch 1.22.7-1.amzn2023.0.1 amazonlinux 11 M
guile22 x86_64 2.2.7-2.amzn2023.0.3 amazonlinux 6.4 M
kernel-headers x86_64 6.1.119-129.201.amzn2023 amazonlinux 1.4 M
libmpc x86_64 1.2.1-2.amzn2023.0.2 amazonlinux 62 k
libserf x86_64 1.3.9-23.amzn2023.0.3 amazonlinux 58 k
libtool-ltdl x86_64 2.4.7-1.amzn2023.0.3 amazonlinux 38 k
libxcrypt-devel x86_64 4.4.33-7.amzn2023 amazonlinux 32 k
make x86_64 1:4.3-5.amzn2023.0.2 amazonlinux 534 k
subversion-libs x86_64 1.14.2-5.amzn2023.0.3 amazonlinux 1.5 M
utf8proc x86_64 2.6.1-2.amzn2023.0.2 amazonlinux 80 k
Installing weak dependencies:
apr-util-openssl x86_64 1.6.3-1.amzn2023.0.1 amazonlinux 17 k
mercurial x86_64 5.7.1-1.amzn2023.0.3 amazonlinux 4.9 M
subversion x86_64 1.14.2-5.amzn2023.0.3 amazonlinux 1.0 M
Transaction Summary
================================================================================================================================================================================================================
Install 25 Packages
Total download size: 98 M
Installed size: 389 M
Downloading Packages:
(1/25): annobin-docs-10.93-1.amzn2023.0.1.noarch.rpm 0% [ ] --- B/s | 0 B --:-- ETA
(1/25): apr-1.7.5-1.amzn2023.0.2.x86_64.rpm 2.3 MB/s | 130 kB 00:00
(2/25): annobin-docs-10.93-1.amzn2023.0.1.noarch.rpm 1.5 MB/s | 92 kB 00:00
(3/25): apr-util-1.6.3-1.amzn2023.0.1.x86_64.rpm 2.6 MB/s | 98 kB 00:00
(4/25): annobin-plugin-gcc-10.93-1.amzn2023.0.1.x86_64.rpm 8.5 MB/s | 887 kB 00:00
(5/25): apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64.rpm 307 kB/s | 17 kB 00:00
(6/25): emacs-filesystem-28.2-3.amzn2023.0.8.noarch.rpm 465 kB/s | 10 kB 00:00
(7/25): gc-8.0.4-5.amzn2023.0.2.x86_64.rpm 4.6 MB/s | 105 kB 00:00
(8/25): glibc-devel-2.34-117.amzn2023.0.1.x86_64.rpm 1.1 MB/s | 33 kB 00:00
(9/25): glibc-headers-x86-2.34-117.amzn2023.0.1.noarch.rpm 13 MB/s | 434 kB 00:00
(10/25): golang-1.22.7-1.amzn2023.0.1.x86_64.rpm 11 MB/s | 661 kB 00:00
(11/25): cpp-11.4.1-2.amzn2023.0.2.x86_64.rpm 38 MB/s | 10 MB 00:00
(12/25): golang-src-1.22.7-1.amzn2023.0.1.noarch.rpm 13 MB/s | 11 MB 00:00
(13/25): golang-bin-1.22.7-1.amzn2023.0.1.x86_64.rpm 23 MB/s | 26 MB 00:01
(14/25): kernel-headers-6.1.119-129.201.amzn2023.x86_64.rpm 21 MB/s | 1.4 MB 00:00
(15/25): libmpc-1.2.1-2.amzn2023.0.2.x86_64.rpm 2.5 MB/s | 62 kB 00:00
(16/25): libserf-1.3.9-23.amzn2023.0.3.x86_64.rpm 2.7 MB/s | 58 kB 00:00
(17/25): libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64.rpm 1.3 MB/s | 38 kB 00:00
(18/25): libxcrypt-devel-4.4.33-7.amzn2023.x86_64.rpm 1.4 MB/s | 32 kB 00:00
(19/25): make-4.3-5.amzn2023.0.2.x86_64.rpm 13 MB/s | 534 kB 00:00
(20/25): guile22-2.2.7-2.amzn2023.0.3.x86_64.rpm 14 MB/s | 6.4 MB 00:00
(21/25): gcc-11.4.1-2.amzn2023.0.2.x86_64.rpm 19 MB/s | 32 MB 00:01
(22/25): subversion-1.14.2-5.amzn2023.0.3.x86_64.rpm 5.2 MB/s | 1.0 MB 00:00
(23/25): subversion-libs-1.14.2-5.amzn2023.0.3.x86_64.rpm 28 MB/s | 1.5 MB 00:00
(24/25): mercurial-5.7.1-1.amzn2023.0.3.x86_64.rpm 16 MB/s | 4.9 MB 00:00
(25/25): utf8proc-2.6.1-2.amzn2023.0.2.x86_64.rpm 1.3 MB/s | 80 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 50 MB/s | 98 MB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Running scriptlet: golang-1.22.7-1.amzn2023.0.1.x86_64 1/1
Preparing : 1/1
Installing : apr-1.7.5-1.amzn2023.0.2.x86_64 1/25
Installing : apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64 2/25
Installing : apr-util-1.6.3-1.amzn2023.0.1.x86_64 3/25
Installing : libmpc-1.2.1-2.amzn2023.0.2.x86_64 4/25
Installing : cpp-11.4.1-2.amzn2023.0.2.x86_64 5/25
Installing : libserf-1.3.9-23.amzn2023.0.3.x86_64 6/25
Installing : utf8proc-2.6.1-2.amzn2023.0.2.x86_64 7/25
Installing : subversion-libs-1.14.2-5.amzn2023.0.3.x86_64 8/25
Installing : subversion-1.14.2-5.amzn2023.0.3.x86_64 9/25
Running scriptlet: subversion-1.14.2-5.amzn2023.0.3.x86_64 9/25
Installing : libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 10/25
Installing : kernel-headers-6.1.119-129.201.amzn2023.x86_64 11/25
Installing : golang-src-1.22.7-1.amzn2023.0.1.noarch 12/25
Installing : glibc-headers-x86-2.34-117.amzn2023.0.1.noarch 13/25
Installing : libxcrypt-devel-4.4.33-7.amzn2023.x86_64 14/25
Installing : glibc-devel-2.34-117.amzn2023.0.1.x86_64 15/25
Installing : gc-8.0.4-5.amzn2023.0.2.x86_64 16/25
Installing : guile22-2.2.7-2.amzn2023.0.3.x86_64 17/25
Installing : make-1:4.3-5.amzn2023.0.2.x86_64 18/25
Installing : gcc-11.4.1-2.amzn2023.0.2.x86_64 19/25
Running scriptlet: gcc-11.4.1-2.amzn2023.0.2.x86_64 19/25
Installing : emacs-filesystem-1:28.2-3.amzn2023.0.8.noarch 20/25
Installing : mercurial-5.7.1-1.amzn2023.0.3.x86_64 21/25
Installing : golang-1.22.7-1.amzn2023.0.1.x86_64 22/25
Installing : golang-bin-1.22.7-1.amzn2023.0.1.x86_64 23/25
Running scriptlet: golang-bin-1.22.7-1.amzn2023.0.1.x86_64 23/25
Installing : annobin-docs-10.93-1.amzn2023.0.1.noarch 24/25
Installing : annobin-plugin-gcc-10.93-1.amzn2023.0.1.x86_64 25/25
Running scriptlet: annobin-plugin-gcc-10.93-1.amzn2023.0.1.x86_64 25/25
Verifying : annobin-docs-10.93-1.amzn2023.0.1.noarch 1/25
Verifying : annobin-plugin-gcc-10.93-1.amzn2023.0.1.x86_64 2/25
Verifying : apr-1.7.5-1.amzn2023.0.2.x86_64 3/25
Verifying : apr-util-1.6.3-1.amzn2023.0.1.x86_64 4/25
Verifying : apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64 5/25
Verifying : cpp-11.4.1-2.amzn2023.0.2.x86_64 6/25
Verifying : emacs-filesystem-1:28.2-3.amzn2023.0.8.noarch 7/25
Verifying : gc-8.0.4-5.amzn2023.0.2.x86_64 8/25
Verifying : gcc-11.4.1-2.amzn2023.0.2.x86_64 9/25
Verifying : glibc-devel-2.34-117.amzn2023.0.1.x86_64 10/25
Verifying : glibc-headers-x86-2.34-117.amzn2023.0.1.noarch 11/25
Verifying : golang-1.22.7-1.amzn2023.0.1.x86_64 12/25
Verifying : golang-bin-1.22.7-1.amzn2023.0.1.x86_64 13/25
Verifying : golang-src-1.22.7-1.amzn2023.0.1.noarch 14/25
Verifying : guile22-2.2.7-2.amzn2023.0.3.x86_64 15/25
Verifying : kernel-headers-6.1.119-129.201.amzn2023.x86_64 16/25
Verifying : libmpc-1.2.1-2.amzn2023.0.2.x86_64 17/25
Verifying : libserf-1.3.9-23.amzn2023.0.3.x86_64 18/25
Verifying : libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 19/25
Verifying : libxcrypt-devel-4.4.33-7.amzn2023.x86_64 20/25
Verifying : make-1:4.3-5.amzn2023.0.2.x86_64 21/25
Verifying : mercurial-5.7.1-1.amzn2023.0.3.x86_64 22/25
Verifying : subversion-1.14.2-5.amzn2023.0.3.x86_64 23/25
Verifying : subversion-libs-1.14.2-5.amzn2023.0.3.x86_64 24/25
Verifying : utf8proc-2.6.1-2.amzn2023.0.2.x86_64 25/25
Installed:
annobin-docs-10.93-1.amzn2023.0.1.noarch annobin-plugin-gcc-10.93-1.amzn2023.0.1.x86_64 apr-1.7.5-1.amzn2023.0.2.x86_64 apr-util-1.6.3-1.amzn2023.0.1.x86_64
apr-util-openssl-1.6.3-1.amzn2023.0.1.x86_64 cpp-11.4.1-2.amzn2023.0.2.x86_64 emacs-filesystem-1:28.2-3.amzn2023.0.8.noarch gc-8.0.4-5.amzn2023.0.2.x86_64
gcc-11.4.1-2.amzn2023.0.2.x86_64 glibc-devel-2.34-117.amzn2023.0.1.x86_64 glibc-headers-x86-2.34-117.amzn2023.0.1.noarch golang-1.22.7-1.amzn2023.0.1.x86_64
golang-bin-1.22.7-1.amzn2023.0.1.x86_64 golang-src-1.22.7-1.amzn2023.0.1.noarch guile22-2.2.7-2.amzn2023.0.3.x86_64 kernel-headers-6.1.119-129.201.amzn2023.x86_64
libmpc-1.2.1-2.amzn2023.0.2.x86_64 libserf-1.3.9-23.amzn2023.0.3.x86_64 libtool-ltdl-2.4.7-1.amzn2023.0.3.x86_64 libxcrypt-devel-4.4.33-7.amzn2023.x86_64
make-1:4.3-5.amzn2023.0.2.x86_64 mercurial-5.7.1-1.amzn2023.0.3.x86_64 subversion-1.14.2-5.amzn2023.0.3.x86_64 subversion-libs-1.14.2-5.amzn2023.0.3.x86_64
utf8proc-2.6.1-2.amzn2023.0.2.x86_64
Complete!
[ec2-user@ip-10-0-3-220 chapter-1]$ go version
go version go1.22.7 linux/amd64
# Go HTTP 서버 실행
cd ./Networking-and-Kubernetes/chapter-1/
go run web-server.go
더보기
[ec2-user@ip-10-0-3-220 ~]$ cd ./Networking-and-Kubernetes/chapter-1/
[ec2-user@ip-10-0-3-220 chapter-1]$ ls -al
total 20
drwxr-xr-x. 3 ec2-user ec2-user 59 Jan 7 05:06 .
drwxr-xr-x. 9 ec2-user ec2-user 155 Jan 7 05:06 ..
-rw-r--r--. 1 ec2-user ec2-user 16021 Jan 7 05:06 README.md
drwxr-xr-x. 2 ec2-user ec2-user 50 Jan 7 05:06 vagrant
-rw-r--r--. 1 ec2-user ec2-user 212 Jan 7 05:06 web-server.go
[ec2-user@ip-10-0-3-220 chapter-1]$ go run web-server.go
curl localhost:8080 -vvv
더보기
[ec2-user@ip-10-0-3-220 ~]$ curl localhost:8080 -vvv
* Host localhost:8080 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
* Trying [::1]:8080...
* Connected to localhost (::1) port 8080
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 07 Jan 2025 05:14:18 GMT
< Content-Length: 5
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host localhost left intact
Hello[ec2-user@ip-10-0-3-220 ~]$
3. 리눅스에서의 네트워크 연결 처리
소켓 검사
# Go 서버 백그라운드 실행
go run web-server.go &
# Go 서버 PID 확인
ps aux | grep web-server
# Go 서버 PID를 Bash 변수로 선언
GO_SERVER_PID=29740
echo $GO_SERVER_PID
# Go 서버 FD확인
ls -lah /proc/$GO_SERVER_PID/fd
더보기
[ec2-user@ip-10-0-3-220 chapter-1]$ go run web-server.go &
[2] 29933
[ec2-user@ip-10-0-3-220 chapter-1]$ ps aux | grep web-server
ec2-user 29699 0.0 0.4 1237928 16112 pts/0 Tl 05:13 0:00 go run web-server.go
ec2-user 29740 0.0 0.1 1610460 5740 pts/0 Tl 05:13 0:00 /tmp/go-build459637264/b001/exe/web-server
ec2-user 29982 0.0 0.0 222316 2052 pts/0 S+ 05:19 0:00 grep --color=auto web-server
[2]- Done go run web-server.go
# Go는 실행시 두개의 프로세스가 생성됨
# 실제 컴파일되어 실행되는 웹 서버 프로세스 (29740)의 PID를 사용해야 Socket FD를 볼 수 있음
[ec2-user@ip-10-0-3-220 chapter-1]$ GO_SERVER_PID=29740
[ec2-user@ip-10-0-3-220 chapter-1]$ echo $GO_SERVER_PID
29740
[ec2-user@ip-10-0-3-220 chapter-1]$ ls -lah /proc/$GO_SERVER_PID/fd
total 0
dr-x------. 2 ec2-user ec2-user 0 Jan 7 05:37 .
dr-xr-xr-x. 9 ec2-user ec2-user 0 Jan 7 05:13 ..
lrwx------. 1 ec2-user ec2-user 64 Jan 7 05:37 0 -> /dev/pts/0
lrwx------. 1 ec2-user ec2-user 64 Jan 7 05:37 1 -> /dev/pts/0
lrwx------. 1 ec2-user ec2-user 64 Jan 7 05:37 2 -> /dev/pts/0
lrwx------. 1 ec2-user ec2-user 64 Jan 7 05:37 3 -> 'socket:[49464]'
lrwx------. 1 ec2-user ec2-user 64 Jan 7 05:37 5 -> 'anon_inode:[eventpoll]'
lr-x------. 1 ec2-user ec2-user 64 Jan 7 05:37 6 -> 'pipe:[49465]'
l-wx------. 1 ec2-user ec2-user 64 Jan 7 05:37 7 -> 'pipe:[49465]'
[ec2-user@ip-10-0-3-220 chapter-1]$
fd 설명
표준 스트림 (0, 1, 2)
0 -> /dev/pts/0 (표준 입력, stdin)
1 -> /dev/pts/0 (표준 출력, stdout)
2 -> /dev/pts/0 (표준 에러, stderr)
# /dev/pts/0 : 현재 사용중인 가상 터미널(pseudo-terminal)/SSH 연결 세션
# echo "테스트" > /dev/pts/0
# 이 명령어를 실행하면 현재 터미널 화면에 "테스트"라고 출력되는 것을 볼 수 있습니다.
# 숫자 0은 첫 번째 터미널 세션을 의미합니다. 새로운 터미널 창을 열 때마다 1, 2 등으로 증가합니다.
# /dev/pts/1, /dev/pts/2 ...
# 따라서 프로세스의 표준 입출력(stdin, stdout, stderr)이 모두 /dev/pts/0를 가리킨다는 것은
# 키보드 입력은 이 터미널에서 받고 (stdin - 0)
# 일반 출력은 이 터미널에 표시되며 (stdout - 1)
# 에러 메시지도 이 터미널에 표시된다 (stderr - 2)
# 는 의미입니다.
epoll(5)
5 -> 'anon_inode:[eventpoll]'
# epoll은 Linux의 I/O 이벤트 통지 메커니즘입니다.
# Go의 네트워크 서버가 클라이언트 연결을 효율적으로 모니터링하기 위해 사용합니다.
파이프 (6, 7)
lr-x------. 1 ec2-user ec2-user 64 Jan 7 05:37 6 -> 'pipe:[49465]'
l-wx------. 1 ec2-user ec2-user 64 Jan 7 05:37 7 -> 'pipe:[49465]'
# 같은 파이프(50183)에 대한 읽기(r-x)와 쓰기(l-wx) 디스크립터입니다. 프로세스 내부 통신에 사용됩니다.
- ls -lah /proc/<서버 프로세스>/fd 명령으로 소켓 목록 확인 가능
- 커널이 패킷을 특정 연결에 매핑
- 각 연결은 파일로 표현됨
strace를 통한 리눅스 커널 시스템 콜 조회
# Amazon Linux 2023 : strace 설치
sudo dnf install strace -y
# Go 서버 빌드 > 실행 파일 생성
cd ./Networking-and-Kubernetes/chapter-1/
go build web-server.go
# strace로 실행 파일을 모니터링
strace ./web-server
# 네트워크 관련 시스템 콜만 보기
strace -e trace=network ./web-server
# 파일 작업 관련 시스템 콜만 보기
strace -e trace=file ./web-server
# 특정 시스템 콜만 보기 (예: open, socket, connect)
strace -e open,socket,connect ./web-server
더보기
[ec2-user@ip-10-0-3-220 chapter-1]$ strace ./web-server
execve("./web-server", ["./web-server"], 0x7ffd2b799490 /* 33 vars */) = 0
brk(NULL) = 0x386b0000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffcb11f1ee0) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=15603, ...}) = 0
mmap(NULL, 15603, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff12c941000
close(3) = 0
openat(AT_FDCWD, "/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=71608, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c93f000
mmap(NULL, 80456, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff12c92b000
mmap(0x7ff12c92f000, 36864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x7ff12c92f000
mmap(0x7ff12c938000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd000) = 0x7ff12c938000
mmap(0x7ff12c93b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0x7ff12c93b000
mmap(0x7ff12c93d000, 6728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff12c93d000
close(3) = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\0\4\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0@\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 80, 848) = 80
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0W\17\223\370\351\266\206\7\355(2\362\333\314\341\355"..., 68, 928) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2385736, ...}) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2129808, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff12c600000
mmap(0x7ff12c628000, 1527808, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7ff12c628000
mmap(0x7ff12c79d000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19d000) = 0x7ff12c79d000
mmap(0x7ff12c7f5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f5000) = 0x7ff12c7f5000
mmap(0x7ff12c7fb000, 53136, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff12c7fb000
close(3) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c928000
arch_prctl(ARCH_SET_FS, 0x7ff12c928740) = 0
set_tid_address(0x7ff12c928a10) = 31022
set_robust_list(0x7ff12c928a20, 24) = 0
rseq(0x7ff12c9290e0, 0x20, 0, 0x53053053) = 0
mprotect(0x7ff12c7f5000, 16384, PROT_READ) = 0
mprotect(0x7ff12c93b000, 4096, PROT_READ) = 0
mprotect(0x7ff12c979000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=10240*1024, rlim_max=10240*1024}) = 0
munmap(0x7ff12c941000, 15603) = 0
getrandom("\xf2\xbb\x48\xab\x19\xca\xdc\xd5", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x386b0000
brk(0x386d1000) = 0x386d1000
openat(AT_FDCWD, "/proc/self/maps", O_RDONLY|O_CLOEXEC) = 3
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=10240*1024, rlim_max=10240*1024}) = 0
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "00400000-00626000 r-xp 00000000 "..., 1024) = 1024
read(3, "-p 00000000 00:00 0 \n7ff12c92800"..., 1024) = 1024
read(3, "6-64.so.2\n7ff12c97b000-7ff12c97d"..., 1024) = 440
close(3) = 0
sched_getaffinity(31022, 32, [0 1]) = 8
sched_getaffinity(0, 8192, [0 1]) = 8
openat(AT_FDCWD, "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size", O_RDONLY) = 3
read(3, "2097152\n", 20) = 8
close(3) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=82674924}) = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c8e8000
mmap(NULL, 131072, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c8c8000
mmap(NULL, 1048576, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c500000
mmap(NULL, 8388608, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12bd00000
mmap(NULL, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff127d00000
mmap(NULL, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff107d00000
mmap(NULL, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff0e7d00000
mmap(0xc000000000, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(NULL, 33554432, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff0e5d00000
madvise(0x7ff0e5d00000, 33554432, MADV_NOHUGEPAGE) = 0
mmap(NULL, 68624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c8b7000
mmap(0xc000000000, 4194304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(0x7ff12c8c8000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff12c8c8000
mmap(0x7ff12c580000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff12c580000
mmap(0x7ff12c106000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff12c106000
mmap(0x7ff129d30000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff129d30000
mmap(0x7ff117e80000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff117e80000
mmap(0x7ff0f7e80000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff0f7e80000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff0e5c00000
madvise(0x7ff0e5c00000, 1048576, MADV_NOHUGEPAGE) = 0
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c8a7000
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c897000
rt_sigprocmask(SIG_SETMASK, NULL, [], 8) = 0
fcntl(0, F_GETFD) = 0
fcntl(1, F_GETFD) = 0
fcntl(2, F_GETFD) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=83776469}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=83802559}) = 0
sigaltstack(NULL, {ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}) = 0
sigaltstack({ss_sp=0xc000008000, ss_flags=0, ss_size=32768}, NULL) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
gettid() = 31022
rt_sigaction(SIGHUP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGINT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGILL, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGILL, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGTRAP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTRAP, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGABRT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGABRT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGBUS, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGFPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGFPE, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGUSR1, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGUSR1, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGSEGV, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGUSR2, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGUSR2, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGALRM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGALRM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGSTKFLT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSTKFLT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGCHLD, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGCHLD, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGURG, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGURG, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGXCPU, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXCPU, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGXFSZ, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXFSZ, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGVTALRM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGVTALRM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGPROF, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPROF, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGWINCH, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGWINCH, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGIO, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGIO, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGPWR, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPWR, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGSYS, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSYS, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRTMIN, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_1, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_2, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_3, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_3, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_4, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_4, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_5, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_5, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_6, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_6, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_7, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_7, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_8, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_8, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_9, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_9, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_10, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_10, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_11, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_11, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_12, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_12, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_13, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_13, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_14, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_14, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_15, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_15, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_16, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_16, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_17, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_17, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_18, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_18, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_19, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_19, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_20, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_20, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_21, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_21, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_22, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_22, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_23, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_23, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_24, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_24, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_25, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_25, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_26, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_26, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_27, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_27, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_28, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_28, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_29, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_29, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_30, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_30, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_31, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_31, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigaction(SIGRT_32, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_32, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7ff12c69cba0, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7ff12c654de0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7ff0e51ff000
mprotect(0x7ff0e5200000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7ff0e5bff910, parent_tid=0x7ff0e5bff910, exit_signal=0,
stack=0x7ff0e51ff000, stack_size=0x9fff00, tls=0x7ff0e5bff640} => {parent_tid=[31023]}, 88) = 31023
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=88470147}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=88767895}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=88784133}) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7ff0df5ff000
mprotect(0x7ff0df600000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7ff0dffff910, parent_tid=0x7ff0dffff910, exit_signal=0,
stack=0x7ff0df5ff000, stack_size=0x9fff00, tls=0x7ff0dffff640} => {parent_tid=[31024]}, 88) = 31024
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
futex(0x89a238, FUTEX_WAKE_PRIVATE, 1) = 1
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7ff0e47fe000
mprotect(0x7ff0e47ff000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7ff0e51fe910, parent_tid=0x7ff0e51fe910, exit_signal=0,
stack=0x7ff0e47fe000, stack_size=0x9fff00, tls=0x7ff0e51fe640} => {parent_tid=[31025]}, 88) = 31025
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff12c857000
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7ff0debfe000
mprotect(0x7ff0debff000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7ff0df5fe910, parent_tid=0x7ff0df5fe910, exit_signal=0,
stack=0x7ff0debfe000, stack_size=0x9fff00, tls=0x7ff0df5fe640} => {parent_tid=[31026]}, 88) = 31026
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=65535, rlim_max=65535}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=91345443}) = 0
fcntl(0, F_GETFL) = 0x2 (flags O_RDWR)
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3463, tv_nsec=91501835}) = 0
futex(0xc000049948, FUTEX_WAKE_PRIVATE, 1) = 1
fcntl(1, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(2, F_GETFL) = 0x2 (flags O_RDWR)
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
close(3) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 4
setsockopt(4, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
bind(4, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_scope_id=0}, 28) = 0
close(4) = 0
close(3) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
openat(AT_FDCWD, "/proc/sys/net/core/somaxconn", O_RDONLY|O_CLOEXEC) = 4
fcntl(4, F_GETFL) = 0x8000 (flags O_RDONLY|O_LARGEFILE)
fcntl(4, F_SETFL, O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 0
epoll_create1(EPOLL_CLOEXEC) = 5
pipe2([6, 7], O_NONBLOCK|O_CLOEXEC) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 6, {events=EPOLLIN, data={u32=9407032, u64=9407032}}) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 4, {events=EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, data={u32=4267704321, u64=9219198866214092801}}) = 0
read(4, "4096\n", 65536) = 5
read(4, "", 65531) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 4, 0xc0000529ec) = 0
close(4) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(8080), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::", &sin6_addr), sin6_scope_id=0}, 28) = -1 EADDRINUSE (Address already in use)
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++
[ec2-user@ip-10-0-3-220 chapter-1]$ strace -e trace=network ./web-server
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31030, si_uid=1000} ---
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 4
setsockopt(4, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
bind(4, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_scope_id=0}, 28) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(8080), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::", &sin6_addr), sin6_scope_id=0}, 28) = -1 EADDRINUSE (Address already in use)
+++ exited with 0 +++
[ec2-user@ip-10-0-3-220 chapter-1]$ ps aux | grep web-server
ec2-user 29699 0.0 0.4 1237928 16112 pts/0 Tl 05:13 0:00 go run web-server.go
ec2-user 29740 0.0 0.1 1610460 5740 pts/0 Tl 05:13 0:00 /tmp/go-build459637264/b001/exe/web-server
ec2-user 31096 0.0 0.0 222316 2028 pts/0 S+ 05:47 0:00 grep --color=auto web-server
[ec2-user@ip-10-0-3-220 chapter-1]$ kill -9
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
[ec2-user@ip-10-0-3-220 chapter-1]$ kill -9 29699
[ec2-user@ip-10-0-3-220 chapter-1]$ kill -9 29740
-bash: kill: (29740) - No such process
[1] Killed go run web-server.go
[ec2-user@ip-10-0-3-220 chapter-1]$
[ec2-user@ip-10-0-3-220 chapter-1]$ strace ./web-server
execve("./web-server", ["./web-server"], 0x7ffef65b3d80 /* 33 vars */) = 0
brk(NULL) = 0x154a4000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffdfdb7f390) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=15603, ...}) = 0
mmap(NULL, 15603, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f45cb491000
close(3) = 0
openat(AT_FDCWD, "/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=71608, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb48f000
mmap(NULL, 80456, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45cb47b000
mmap(0x7f45cb47f000, 36864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0x7f45cb47f000
mmap(0x7f45cb488000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd000) = 0x7f45cb488000
mmap(0x7f45cb48b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0x7f45cb48b000
mmap(0x7f45cb48d000, 6728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45cb48d000
close(3) = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\0\4\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0@\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 80, 848) = 80
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0W\17\223\370\351\266\206\7\355(2\362\333\314\341\355"..., 68, 928) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2385736, ...}) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2129808, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45cb200000
mmap(0x7f45cb228000, 1527808, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7f45cb228000
mmap(0x7f45cb39d000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19d000) = 0x7f45cb39d000
mmap(0x7f45cb3f5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f5000) = 0x7f45cb3f5000
mmap(0x7f45cb3fb000, 53136, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45cb3fb000
close(3) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb478000
arch_prctl(ARCH_SET_FS, 0x7f45cb478740) = 0
set_tid_address(0x7f45cb478a10) = 31100
set_robust_list(0x7f45cb478a20, 24) = 0
rseq(0x7f45cb4790e0, 0x20, 0, 0x53053053) = 0
mprotect(0x7f45cb3f5000, 16384, PROT_READ) = 0
mprotect(0x7f45cb48b000, 4096, PROT_READ) = 0
mprotect(0x7f45cb4c9000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=10240*1024, rlim_max=10240*1024}) = 0
munmap(0x7f45cb491000, 15603) = 0
getrandom("\xc3\xed\xda\xfc\x2c\x93\xfe\x52", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x154a4000
brk(0x154c5000) = 0x154c5000
openat(AT_FDCWD, "/proc/self/maps", O_RDONLY|O_CLOEXEC) = 3
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=10240*1024, rlim_max=10240*1024}) = 0
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "00400000-00626000 r-xp 00000000 "..., 1024) = 1024
read(3, "-p 00000000 00:00 0 \n7f45cb47800"..., 1024) = 1024
read(3, "6-64.so.2\n7f45cb4cb000-7f45cb4cd"..., 1024) = 440
close(3) = 0
sched_getaffinity(31100, 32, [0 1]) = 8
sched_getaffinity(0, 8192, [0 1]) = 8
openat(AT_FDCWD, "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size", O_RDONLY) = 3
read(3, "2097152\n", 20) = 8
close(3) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=903066150}) = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb438000
mmap(NULL, 131072, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb418000
mmap(NULL, 1048576, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb100000
mmap(NULL, 8388608, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45ca900000
mmap(NULL, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45c6900000
mmap(NULL, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45a6900000
mmap(NULL, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4586900000
mmap(0xc000000000, 67108864, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(NULL, 33554432, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4584900000
madvise(0x7f4584900000, 33554432, MADV_NOHUGEPAGE) = 0
mmap(NULL, 68624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45848ef000
mmap(0xc000000000, 4194304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(0x7f45cb418000, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45cb418000
mmap(0x7f45cb180000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45cb180000
mmap(0x7f45cad06000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45cad06000
mmap(0x7f45c8930000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45c8930000
mmap(0x7f45b6a80000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45b6a80000
mmap(0x7f4596a80000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4596a80000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45847ef000
madvise(0x7f45847ef000, 1048576, MADV_NOHUGEPAGE) = 0
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45cb408000
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45847df000
rt_sigprocmask(SIG_SETMASK, NULL, [], 8) = 0
fcntl(0, F_GETFD) = 0
fcntl(1, F_GETFD) = 0
fcntl(2, F_GETFD) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=906378557}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=906502025}) = 0
sigaltstack(NULL, {ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}) = 0
sigaltstack({ss_sp=0xc000008000, ss_flags=0, ss_size=32768}, NULL) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
gettid() = 31100
rt_sigaction(SIGHUP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGINT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGILL, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGILL, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGTRAP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTRAP, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGABRT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGABRT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGBUS, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGBUS, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGFPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGFPE, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGUSR1, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGUSR1, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGSEGV, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSEGV, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGUSR2, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGUSR2, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPIPE, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGALRM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGALRM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGSTKFLT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSTKFLT, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGCHLD, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGCHLD, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGURG, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGURG, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGXCPU, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXCPU, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGXFSZ, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGXFSZ, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGVTALRM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGVTALRM, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGPROF, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPROF, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGWINCH, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGWINCH, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGIO, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGIO, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGPWR, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPWR, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGSYS, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGSYS, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRTMIN, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_1, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_2, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_3, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_3, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_4, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_4, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_5, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_5, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_6, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_6, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_7, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_7, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_8, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_8, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_9, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_9, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_10, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_10, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_11, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_11, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_12, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_12, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_13, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_13, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_14, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_14, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_15, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_15, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_16, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_16, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_17, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_17, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_18, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_18, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_19, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_19, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_20, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_20, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_21, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_21, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_22, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_22, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_23, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_23, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_24, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_24, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_25, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_25, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_26, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_26, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_27, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_27, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_28, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_28, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_29, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_29, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_30, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_30, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_31, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_31, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigaction(SIGRT_32, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGRT_32, {sa_handler=0x46f7a0, sa_mask=~[RTMIN RT_1], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f45cb29cba0, sa_mask=[], sa_flags=SA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f45cb254de0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4583dde000
mprotect(0x7f4583ddf000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7f45847de910, parent_tid=0x7f45847de910, exit_signal=0,
stack=0x7f4583dde000, stack_size=0x9fff00, tls=0x7f45847de640} => {parent_tid=[31101]}, 88) = 31101
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=924311921}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
--- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=31100, si_uid=1000} ---
rt_sigreturn({mask=[]}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=926033512}) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f45833dd000
mprotect(0x7f45833de000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7f4583ddd910, parent_tid=0x7f4583ddd910, exit_signal=0,
stack=0x7f45833dd000, stack_size=0x9fff00, tls=0x7f4583ddd640} => {parent_tid=[31102]}, 88) = 31102
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
futex(0xc000049148, FUTEX_WAKE_PRIVATE, 1) = 1
sched_yield() = 0
futex(0x89a238, FUTEX_WAKE_PRIVATE, 1) = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f458339d000
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=927175426}) = 0
futex(0xc000049148, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0xc000049148, FUTEX_WAKE_PRIVATE, 1) = 1
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f458299c000
mprotect(0x7f458299d000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7f458339c910, parent_tid=0x7f458339c910, exit_signal=0,
stack=0x7f458299c000, stack_size=0x9fff00, tls=0x7f458339c640} => {parent_tid=[31103]}, 88) = 31103
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=65535, rlim_max=65535}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=930601422}) = 0
fcntl(0, F_GETFL) = 0x2 (flags O_RDWR)
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=930733180}) = 0
futex(0xc000049148, FUTEX_WAKE_PRIVATE, 1) = 1
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f458295c000
fcntl(1, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(2, F_GETFL) = 0x2 (flags O_RDWR)
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
close(3) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 4
setsockopt(4, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
bind(4, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_scope_id=0}, 28) = 0
close(4) = 0
close(3) = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
setsockopt(3, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
openat(AT_FDCWD, "/proc/sys/net/core/somaxconn", O_RDONLY|O_CLOEXEC) = 4
fcntl(4, F_GETFL) = 0x8000 (flags O_RDONLY|O_LARGEFILE)
fcntl(4, F_SETFL, O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 0
epoll_create1(EPOLL_CLOEXEC) = 5
pipe2([6, 7], O_NONBLOCK|O_CLOEXEC) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 6, {events=EPOLLIN, data={u32=9407032, u64=9407032}}) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 4, {events=EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, data={u32=245366785, u64=9170879797211955201}}) = 0
read(4, "4096\n", 65536) = 5
read(4, "", 65531) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 4, 0xc0000579ec) = 0
close(4) = 0
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(3, {sa_family=AF_INET6, sin6_port=htons(8080), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::", &sin6_addr), sin6_scope_id=0}, 28) = 0
listen(3, 4096) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 3, {events=EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, data={u32=245366786, u64=9170879797211955202}}) = 0
getsockname(3, {sa_family=AF_INET6, sin6_port=htons(8080), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::", &sin6_addr), sin6_scope_id=0}, [112 => 28]) = 0
accept4(3, 0xc000057afc, [112], SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
epoll_pwait(5, [], 128, 0, NULL, 0) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3562, tv_nsec=934790159}) = 0
epoll_pwait(5,
# curl할 경우, system call strace
[ec2-user@ip-10-0-3-220 ~]$ curl localhost:8080 -vvv
더보기
epoll_pwait(5, [{events=EPOLLIN, data={u32=245366786, u64=9170879797211955202}}], 128, -1, NULL, 0) = 1
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=604407809}) = 0
futex(0x89a320, FUTEX_WAKE_PRIVATE, 1) = 1
accept4(3, {sa_family=AF_INET6, sin6_port=htons(49400), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, [112 => 28], SOCK_CLOEXEC|SOCK_NONBLOCK) = 4
epoll_ctl(5, EPOLL_CTL_ADD, 4, {events=EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, data={u32=229113857, u64=9170879797195702273}}) = 0
getsockname(4, {sa_family=AF_INET6, sin6_port=htons(8080), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, [112 => 28]) = 0
setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(4, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(4, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0
setsockopt(4, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=834124578}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=604723185}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=604749986}) = 0
futex(0xc000049148, FUTEX_WAKE_PRIVATE, 1) = 1
accept4(3, 0xc000057afc, [112], SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=834327376}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=604921058}) = 0
read(4, "GET / HTTP/1.1\r\nHost: localhost:"..., 4096) = 77
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=834493000}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=605082206}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=605103777}) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
mmap(NULL, 10489856, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4581f5b000
mprotect(0x7f4581f5c000, 10485760, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN RT_1], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7f458295b910, parent_tid=0x7f458295b910, exit_signal=0,
stack=0x7f4581f5b000, stack_size=0x9fff00, tls=0x7f458295b640} => {parent_tid=[31166]}, 88) = 31166
rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN RT_1], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=835184795}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=605850770}) = 0
write(4, "HTTP/1.1 200 OK\r\nDate: Tue, 07 J"..., 121) = 121
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=835941833}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=606575406}) = 0
read(4, "", 4096) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 4, 0xc00014f914) = 0
close(4) = 0
clock_gettime(CLOCK_REALTIME, {tv_sec=1736228983, tv_nsec=836255457}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=606865626}) = 0
clock_gettime(CLOCK_MONOTONIC, {tv_sec=3668, tv_nsec=606964570}) = 0
futex(0x899140, FUTEX_WAIT_PRIVATE, 0, NULL
1. 연결 수락 단계
#### 1. 연결 수락 단계 ####
# epoll을 통해 새로운 연결 요청을 감지
epoll_pwait(5, [{events=EPOLLIN, data={...}}], 128, -1, NULL, 0) = 1
# accept4로 IPv6 소켓(::1, localhost)의 49400 포트에서 들어온 연결을 수락
accept4(3, {sa_family=AF_INET6, sin6_port=htons(49400), ...}, [112 => 28], SOCK_CLOEXEC|SOCK_NONBLOCK) = 4
#### 2. 소켓 설정 ####
# TCP_NODELAY 활성화 (Nagle 알고리즘 비활성화)
setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
# Keep-alive 설정 활성화
setsockopt(4, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
# Keep-alive 간격을 15초로 설정
setsockopt(4, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0
setsockopt(4, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0
#### 3. 요청 읽기 ####
# 클라이언트로부터 HTTP GET 요청을 읽음
read(4, "GET / HTTP/1.1\r\nHost: localhost:"..., 4096) = 77
#### 4. 응답 전송 ####
# 클라이언트에게 HTTP 200 OK 응답을 전송
write(4, "HTTP/1.1 200 OK\r\nDate: Tue, 07 J"..., 121) = 121
#### 5. 연결 종료 ####
# 더 이상 읽을 데이터가 없음을 확인
# epoll에서 소켓 제거
# 소켓 연결 종료
read(4, "", 4096) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 4, 0xc00014f914) = 0
close(4) = 0