1. 동기소켓
동기 소켓은 클라이언트가 "HELLO" 라고 요청하면 서버가 대답을 보내줄 때까지 기다려야 한다.
--> 클라이언트의 send 후 recv 할 때까지 기다림.
그래서 프로그램 설계 때 클라이언트와 서버의 패킷 교환을 명확히 해야 할 필요가 있음.
2. 비동기소켓
비동기는 클라이언트가 "HELLO" 라고 요청하고 나서 서버의 응답이 오기 전까지 다른 일을 수행 할 수 있다.
--> 서버의 응답이 없어도 (프로그래머가 응답이 없으면 끝내는 루틴을 넣지 않는 한,) 프로그램이 종료되지 않는다.
그래서 이 동기, 비동기 소켓을 보고 나서, 맨 처음에 들었던 생각은 동기보다 비동기가 더 좋은 방식이 아닌가 생각했었는데, 검색을 좀 더 해보니
http://jangpd007.tistory.com/70
이런 내용이 나왔다. 해당 내용을 요약하자면
비동기 소켓과 동기 소켓이 둘 다 존재하는 이유는 각각 쓰임새가 달라서 였다.
즉, 소켓에서 서버에게 보낸 요청에 대한 응답이 오지 않을 경우에 다음 코드로 넘어가는 것을 막을 때 동기소켓을 사용하면 유용하다.
우리가 소켓을 사용할 때 흔히 사용하는 함수는 socket() 함수이다.
AF_INET, PF_INET 등의 인자값을 넘겨주고, sockaddr 구조체를 넘겨주어 소켓 fd 를 가지는데 이때 생성된 소켓은 블로킹 방식 (동기식) 으로 생성된다.
이 소켓을 비동기식으로 바꾸려면 fcntl() 로 변경할 수 있다는데 일단 해볼 필요가 있는 것 같다. 지금 만들고 있는 서버 코드에 동기식 대신 비동기식 소켓으로 대체 하면 더 질 좋은 코드가 나올 것 같다.
'전공 과목 시험정리 > C 프로그래밍' 카테고리의 다른 글
Fate 서버 소스 (미완성) (0) | 2015.04.25 |
---|---|
fork 로 프로세스 생성 후, 프로세스간 변수 공유 (0) | 2015.04.25 |
웹에서 서버정보 파싱 (0) | 2015.04.25 |
쓰레드 프로그램 (0) | 2015.04.25 |
알고리즘 대결 서버 소스 (0) | 2015.04.25 |