종료를 말하기 전에 우선 시작된 상태를 말해야 할 것같다.
글보단 그림이 더 좋기 때문에, 그림을 바로 띄우면 아래 그림과 같다.
1. 소켓의 우아한 종료가 왜 필요 할까?
이 모습은 소켓의 정상적인 연결 상태를 보여준다.
각각의 소켓은 입·출력 스트림을 가지고(가진다는 표현이 좋겠다) 있어, 입력을 받거나, 출력을 하게 된다.
그리고 접속을 종료하게 될때 우리는 closesoket 함수를 이용하여, 소켓을 닫는다.
그럼 아래와 같은 그림이 보이게 된다.
이렇게 HOSTA는 소켓을 닫음과 동시에 입·출력 스트림도 닫아 버리고, 자신에게 가지고 있던, 버퍼부터 시작한 모든 리소르를 운영체제에게 반환해준다.
물론 일반적인 경우에 문제가 되지는 않지만, "어떤 중요한 정보"를 HostB가 전송도중이였다면, 그 정보는 잃어 버리게 된다. 물론 나중에 다시 요청할수 있다면 그때 다시 요청해도 되겠지만 말이다.
만약 그 중요한 정보가 바로 지금 필요한 정보라면, 함부로 소켓을 닫는 행위는 좀 껄그럽게 된다.
그래서 우아하게 종료가 되는 것이 필요한것이다.
요약 : 우아한 종료는 중요한 정보를 보내거나 받는 도중 소켓을 닫지 않기 위해서 필요하다.
그렇다면 2. 우아한 종료란 무엇일까?
그림 하나가 더 좋은 설명을 할수 있어, 그림을 구해왔다.
여기서 보면 알수 있듯이 우아한 종료는 자신의 입·출력 포트 중 자신의 현재 상태에 맞게 한쪽 스트림만 닫는것을 뜻하게 된다.
그러니까~ 만약 내가 중요한 정보를 보내고 있고, 접속을 종료해야 한다면, 중요한 정보를 다 보내고 나서, 출력 스트림만 닫고, "HostB가 무사히 받았어요" 라고 말을 해주면 그때서야 입력 스트림을 닫은 후에, 소켓을 닫아 버리게 된다.
이렇게 중요한 정보를 보내거나 받게 될때, 프로그래머는 해당 정보의 중요성 여부를 판단하여, 소켓을 제어하면 좋을듯 싶다.
우아한 종료를 하기 위한 함수
shutdown(
IN SOCKET s,
IN int how
);
파라메터 S : 대상이 되는 소켓
파라메터 how
이렇게 .. 되어 있다.
그러면 좋은 하루!
글보단 그림이 더 좋기 때문에, 그림을 바로 띄우면 아래 그림과 같다.
1. 소켓의 우아한 종료가 왜 필요 할까?
소켓 정상적인 접속 중
이 모습은 소켓의 정상적인 연결 상태를 보여준다.
각각의 소켓은 입·출력 스트림을 가지고(가진다는 표현이 좋겠다) 있어, 입력을 받거나, 출력을 하게 된다.
그리고 접속을 종료하게 될때 우리는 closesoket 함수를 이용하여, 소켓을 닫는다.
그럼 아래와 같은 그림이 보이게 된다.
이렇게 HOSTA는 소켓을 닫음과 동시에 입·출력 스트림도 닫아 버리고, 자신에게 가지고 있던, 버퍼부터 시작한 모든 리소르를 운영체제에게 반환해준다.
물론 일반적인 경우에 문제가 되지는 않지만, "어떤 중요한 정보"를 HostB가 전송도중이였다면, 그 정보는 잃어 버리게 된다. 물론 나중에 다시 요청할수 있다면 그때 다시 요청해도 되겠지만 말이다.
만약 그 중요한 정보가 바로 지금 필요한 정보라면, 함부로 소켓을 닫는 행위는 좀 껄그럽게 된다.
그래서 우아하게 종료가 되는 것이 필요한것이다.
요약 : 우아한 종료는 중요한 정보를 보내거나 받는 도중 소켓을 닫지 않기 위해서 필요하다.
그렇다면 2. 우아한 종료란 무엇일까?
그림 하나가 더 좋은 설명을 할수 있어, 그림을 구해왔다.
여기서 보면 알수 있듯이 우아한 종료는 자신의 입·출력 포트 중 자신의 현재 상태에 맞게 한쪽 스트림만 닫는것을 뜻하게 된다.
그러니까~ 만약 내가 중요한 정보를 보내고 있고, 접속을 종료해야 한다면, 중요한 정보를 다 보내고 나서, 출력 스트림만 닫고, "HostB가 무사히 받았어요" 라고 말을 해주면 그때서야 입력 스트림을 닫은 후에, 소켓을 닫아 버리게 된다.
이렇게 중요한 정보를 보내거나 받게 될때, 프로그래머는 해당 정보의 중요성 여부를 판단하여, 소켓을 제어하면 좋을듯 싶다.
우아한 종료를 하기 위한 함수
shutdown(
IN SOCKET s,
IN int how
);
파라메터 S : 대상이 되는 소켓
파라메터 how
이렇게 .. 되어 있다.
그러면 좋은 하루!
'연구실 > 네트워크 이해하기' 카테고리의 다른 글
SO_LINGER는 무슨 옵션이냐? (0) | 2008.09.23 |
---|---|
자꾸 이곳 저곳에서 보는 내용들 때문에 어디서 부터 정리를.. (0) | 2008.07.10 |
어려운것 (0) | 2008.06.09 |
5.TCP와 UDP는 무엇인가요? (0) | 2008.06.03 |
4. IP 와 Prot 는 무엇인가요? (0) | 2008.06.03 |
3. 그러면 소켓은 어떻게 만드나? (0) | 2008.06.03 |
2. 어떻게 컴퓨터간에 연결이 이루어 지나요? (0) | 2008.06.03 |
1. 네트워크 프로그래밍이 무엇인가요!? (0) | 2008.06.03 |
네트워크 원리 이해, 총 3장의 사진으로 완성 한다. (0) | 2007.10.12 |
소켓 프로그래밍이란 무엇이며, 어떻게 공부해야 하는가? (0) | 2007.09.26 |
최근댓글