소켓통신 동기식, 비동기식
동기식(Synchronous)
클라가 서버로 접속 요청을 하면 서버가 받았다는 결과를 클라에 다시 보낼 때까지 클라는 멈춰있고
서버로부터 클라가 받았었다는 요청을 받은 후 다음 일을 진행하는 형태
비동기식(Asynchronous)
클라가 서버로 접속 요청을 하면 서버가 받던 말던 클라는 계속해서 다음일을 진행하고 있다가
나중에 서버측에서 클라로부터 받았다는 신호를 클라에게 보내면 그 때 클라가 받는 형태
블러킹(blocking)
더 이상 진행하지 않도록 잡아두는 형태
논 블러킹(none blocking)
데이터를 보내고 그에 대한 응답을 기다리지 않고 다음으로 진행하는 방식
블러킹 모드의 소켓 처리 형태
recvfrom()을 호출할 당시 해당 소켓안의 데이터를 읽어 데이터가 없으면 데이터가 들어올때까지 멈춰있는 형태.
sendto()를 호출할때도 마찬가지로 미전송된 데이터들로 버퍼가 채워져 있으면 비워질 때까지 멈춰있는 형태.
(여기서 버퍼란 사용자가 만든 버퍼가 아니라 소켓안에서 자동으로 처리되어지는 버퍼를 말한다.)
논블러킹 모드의 소켓 처리 형태
recvfrom()을 호출할 당시 해당 소켓에 읽을 데이터가 있으면 해당 데이터를 반환하지만 데이터가 없을때에는
데이터가 없다고 상황을 알려줌. 이런형태가 무한루프 돌듯이 계속적으로 됨으로 사용자가 if문으로 걸러줘야 한다.
sendto()를 호출할 때 전송 버퍼가 비워있으면 정상적으로 데이터를 전송하지만 전송버퍼가 채워져 있으면
보낼 수 없는 상태라고 사용자에게 알려준다.
출처 : http://blog.naver.com/ppusarida/40064822212