본문 바로가기

전공 과목 시험정리/C 프로그래밍

동기 소켓 vs 비동기 소켓

1. 동기소켓

동기 소켓은 클라이언트가 "HELLO" 라고 요청하면 서버가 대답을 보내줄 때까지 기다려야 한다.

--> 클라이언트의 send 후 recv 할 때까지 기다림.


그래서 프로그램 설계 때 클라이언트와 서버의 패킷 교환을 명확히 해야 할 필요가 있음.


2. 비동기소켓

비동기는 클라이언트가 "HELLO" 라고 요청하고 나서 서버의 응답이 오기 전까지 다른 일을 수행 할 수 있다.

--> 서버의 응답이 없어도 (프로그래머가 응답이 없으면 끝내는 루틴을 넣지 않는 한,)      프로그램이 종료되지 않는다.


그래서 이 동기, 비동기 소켓을 보고 나서, 맨 처음에 들었던 생각은 동기보다 비동기가 더 좋은 방식이 아닌가 생각했었는데, 검색을 좀 더 해보니

http://jangpd007.tistory.com/70


이런 내용이 나왔다. 해당 내용을 요약하자면

비동기 소켓과 동기 소켓이 둘 다 존재하는 이유는 각각 쓰임새가 달라서 였다.


즉, 소켓에서 서버에게 보낸 요청에 대한 응답이 오지 않을 경우에 다음 코드로 넘어가는 것을 막을 때 동기소켓을 사용하면 유용하다.



우리가 소켓을 사용할 때 흔히 사용하는 함수는 socket() 함수이다.

AF_INET, PF_INET 등의 인자값을 넘겨주고, sockaddr 구조체를 넘겨주어 소켓 fd 를 가지는데 이때 생성된 소켓은 블로킹 방식 (동기식) 으로 생성된다.


이 소켓을 비동기식으로 바꾸려면 fcntl() 로 변경할 수 있다는데 일단 해볼 필요가 있는 것 같다. 지금 만들고 있는 서버 코드에 동기식 대신 비동기식 소켓으로 대체 하면 더 질 좋은 코드가 나올 것 같다.