getsockopt()
: socket option을 얻기 위한 함수
setsockopt()
: socket option을 세팅 하기 위한 함수
모든 옵션이 get, set이 되는 건 아니다.
입출력 버퍼 사이즈 또한 세팅, 반환이 가능 (하지만 실제로 세팅해도 적극적 참고만 이루어질 뿐 정확하게 반영되진 않는다.)
time-wait
- 주소할당 에러의 원인
- tcp 소켓 종료 시 4-way shaking의 첫 번째 메시지를 전달하는 호스트의 소켓은 time-wait 상태를 거친다. 그 동안에는 소켓이 소멸되지 않아서(프로그램이 종료 됐지만, 여전히 운영체제에서는 사라지지 않음) 할당 받은 port를 다른 소켓이 할당 할 수 없다.
- 먼저 메시지를 보낸 호스트의 마지막 ack 메시지가 상대방 호스트에게 제대로 전달되지 않은 경우를 대비해서 time-wait를 가지게 된다. ack 메시지가 제대로 전달 되지 않았으면 상대 호스트는 다시 fin 메시지를 보낼 것이기 때문이다.
- 이러한 time-wait는 상대 호스트의 fin 메시지를 받으면 timer가 재가동 되기 때문에 경우에 따라서는 굉장히 길어질 수 도 있다.
reuseaddr (소켓 옵션)
- time-wait를 무시하고 port를 할당이 가능하도록 코드를 수정해야 한다.
nagle 알고리즘
-인터넷의 과도한 트래픽을 막기 위해서 디자인 된 알고리즘
-일반적으로 목적이 분명한 게 아니라면 nagle알고리즘을 적용하는 것이 좋다.
-데이터에는 헤더가 붙기 때문에 모아서 보내는 게 효율적이다.
-앞서 전송한 데이터에 대한 ack 메시지를 받아야만 다음 데이터를 전송하는 알고리즘이다.
-nagle 알고리즘을 적용하면 마치 tcp가 udp와 같은 퍼포먼스를 발휘 할 수도...?
-socket option 이름은 TCP_NODELAY (기본값이 on 상태이다)
'Network' 카테고리의 다른 글
[인강/윤성우/TCP/IP 소켓 프로그래밍] 프로세스간 통신 (0) | 2022.03.08 |
---|---|
[인강/윤성우/TCP/IP 소켓 프로그래밍] 멀티 프로세스 기반의 서버 (0) | 2022.03.04 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] 도메인 이름과 인터넷 주소 (0) | 2022.03.02 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] TCP half close (0) | 2022.03.02 |
[인강/윤성우/TCP/IP 소켓 프로그래밍] UDP기반 서버/ 클라이언트 (0) | 2022.03.02 |