포트 하나당 listening server 는 기본적으로 1개 배치된다.
단, 여러개의 thread 실행할 경우 child process 등 경우 한번에 여러개의 connection을 실행하기도 한다. (웹서버의 기능)
기본적으로 sudo lsof -i 를 써서 listening 중인 program을 찾을 수 있다.
lsof는 list open files 의 약자이다.
-i 는 internet socket만 찾는다.
vagrant@vagrant:~$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 456 root 6u IPv4 15628 0t0 UDP *:sunrpc
rpcbind 456 root 7u IPv4 15629 0t0 UDP *:632
rpcbind 456 root 8u IPv4 15630 0t0 TCP *:sunrpc (LISTEN)
rpcbind 456 root 9u IPv6 15631 0t0 UDP *:sunrpc
rpcbind 456 root 10u IPv6 15632 0t0 UDP *:632
rpcbind 456 root 11u IPv6 15633 0t0 TCP *:sunrpc (LISTEN)
systemd-n 462 systemd-network 19u IPv4 15945 0t0 UDP vagrant:bootpc
systemd-r 490 systemd-resolve 12u IPv4 15991 0t0 UDP localhost:domain
systemd-r 490 systemd-resolve 13u IPv4 15992 0t0 TCP localhost:domain (LISTEN)
sshd 883 root 3u IPv4 19750 0t0 TCP *:ssh (LISTEN)
sshd 883 root 4u IPv6 19765 0t0 TCP *:ssh (LISTEN)
sshd 1409 root 3u IPv4 22697 0t0 TCP vagrant:ssh->_gateway:55207 (ESTABLISHED)
sshd 1486 vagrant 3u IPv4 22697 0t0 TCP vagrant:ssh->_gateway:55207 (ESTABLISHED)
이 중 (LISTEN) 만 골라보면 program name 은 다음과 같다.
rpcbind
systemd-r
sshd
vagrant@vagrant:~$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 456 root 8u IPv4 15630 0t0 TCP *:sunrpc (LISTEN)
rpcbind 456 root 11u IPv6 15633 0t0 TCP *:sunrpc (LISTEN)
systemd-r 490 systemd-resolve 13u IPv4 15992 0t0 TCP localhost:domain (LISTEN)
sshd 883 root 3u IPv4 19750 0t0 TCP *:ssh (LISTEN)
sshd 883 root 4u IPv6 19765 0t0 TCP *:ssh (LISTEN)
Vagrant Webserver 설정
host : 127.0.0.1 4567
guest : 10.0.2.15 1234
apache2 794 root 4u IPv6 19106 0t0 TCP *:http (LISTEN)
apache2 795 www-data 4u IPv6 19106 0t0 TCP *:http (LISTEN)
apache2 796 www-data 4u IPv6 19106 0t0 TCP *:http (LISTEN)
printf 'HTTP/1.1 302 Moved\r\nLocation: https://www.eff.org/' | nc -l 1234
한번에 여러 connection을 수신하는 방법?
프로세스와 스레드 풀을 만들어놓고
각각이 하나의 connection을 한번에 handleg한다.
신규 프로세스를 생성하는것보다 빠르지만
request 제한이 있다.