9장 10장
----------------------------------------------------------------------------------
입력및 출력버퍼의 크기
데이타 전송방식 TCP _ UDP
TTL time to live
소켓관련 옵션 관련 함수
getsockopt 현제 설정옵션가져옴
setsockopt 옵션 설정
소켓의 옵션들
get 함수에서 사용할수 있는 옵션들은 소켓의 설정을 볼수만있고 설정은불가한것들도있다.
전송버퍼 수신버퍼 타임아웃에 대한 반응도 설정해줄수있다.
뒤에 네이클알고리즘에대해서 쓸건지 안쓸건지도 할수있다.
-----------------------------------
타임웨잇상태라는것은
연결종료시에 4웨이 핸드쉐이킹을한다.
1.핀신호를 에이에서주면(종료합시다)
2.비는 에크신호로 응답하고(오키)
핀페킷으로 끝내자고한다.(나도종료하겠다.)
3.핀페킷을 받은 에이쪽에서 에크신호를 보내서 연결종료한다.(나도종료했어)
이 이후에 타임웨잇값을 두어서 대기하고있기 때에 이 타임웨잇 시간안에는
다시 서버를 설정하기위해서 같은 포트로 아이피로 바인딩이안된다.
타임웨잇시간은 생각보다 길어 질 수 있다.
왜냐하면 3번에서 에이쪽에서 신호를 보내는것이 비가받지못해서이기때문이다.
SO_REUSEADDR을 트루로설정하면 타임웨잇상태에 있더라도 포트를 제할당 받아서 쓸수가있다.
================================================
네글알고리즘을 쓰게 되면
에이쪽에서 신호를 보내면 비에서 에크신호가 올때까지 다시 보내지않는다.
장점:네트워크의 효율성이 높아진다 (적은패킷양)
단점:전송속도가 느리다 꼭 에크신호가 온담에 다시 다음주소를 보내기때문에
에크신호가 오기전에 여러가지 신호를 보내고 에크신호를 받는 것과는 차이가 있다.
===================================================
다중접속서버의 구현 방법들
1.하나는 멀티 태스킹 서버의구현 = 포크함수쓰면되고
부모프로세스가 하는역할이 클라이언트가 접속을 하면 포크를 호출해주고 자식프로세스에 할당해준다.
데이타 스택 힙은 프로세스가 별도로 항당받아서쓴다.
2.다른하나의 방법은셀렉트의 함수를 사용해서 멀티플렉싱을한다.
3.쓰레드기반으로 하는 멀티 쓰레딩 서버의 구현= 쓰레드함수쓰면된다.
멀티쓰레드는 클라이언트가 접속하면 쓰레드를 하나 할당해준다.
====================================================
프로세스로 할당하는 방법
억셉트가 호출이되면 새로운 클라이언트 소켓이 들어오게되면
이전에 가지고 있던 소켓번호를 모르니까 클로우즈해준다.
부모프로세스에서 자식 프로세스를 생성한후에는 부모 프로세스를 끊어 버린다.
왜냐면 다른 클라이언트에서 접속할때 부모프로세스는 계속 덮어쓰기 되니까
나중에 접속끈키위해서 해제할려고하면 전에 값들을 모두가진상태에서 하나씩 해제해나가야된다.
어차피 자식 프로세스가 통신하기때문에 부모프로세스는 통신할필요가없다.
부모클라이언트에서는 뒤에 가서 클라이언트 소켓을 끊을려면 값을 가지고 있어야되니까 미리끊어버린다.
자식프로세스는 서버프로세스를 끊고 시작하는것이다.
자식프로세스를 보면 실제로 읽어서라이트하고 클라이언트에서 읽으면 연결종료
--------------------------------------
위에것은 리드함수를 호출하면
라이트를 못하고
라이트를 하면리드를 못하기 때문에 입출력을 분리하는것이 중요하다.
보내는것도 마음대로 할수있고
받는것도 마음대로 할수있다.
멀티클라이언트
멀티클라이언트 포크로
부모는리드만하고
자식은 라이트만한다.
반환값이 영이아니면 계속
메세지를 화면에 뿌려주고있다.