728x90

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 상태이다)

 

728x90

+ Recent posts