소켓 플밍 관련해서 질문 있습니다.
슬아s
질문 제목 : 소켓종료에 관해서 질문드립니다.서버에서 클라이언트 하나가 종료를 하면 서버도 같이 종료되나요 종료되지 않는 방법좀 알려주세요.질문 내용 :
안녕하세요. 이번에 리눅스에서 채팅프로그램을 만들고 있는데요. 의문점이 있어서 질문 드립니다.
서버에 클라이언트가 접속했다가 클라이언트에서 close()으로 소켓을 종료하면 그냥 그 클라이언트와만이 연결이 종료 되는거라
생각하고 있었는데 막상 플밍을 하니 아닌거 같아 질문드립니다. 일단 질문을 이해하기 쉽게 아주 간단하게 밑에 소스를 써봤습
니다.
----------------------------------------메인함수부분----------------------------------------
while(1){
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size) ;
pthread_create(&thread, null, clnt_connection, (void*)clnt_sock) ; //클라이언트가 접속을 하면 수신쓰레드생성
}
----------------------------------------------------------------------------------------------
main에서는 이렇게 while을 돌리면서 클라이언트들의 접속을 수락해주고 바로 그클라이언트의 데이터를 받아주는 쓰레드를
생성해줍니다 밑에는 쓰레드에서 클라이언트들의 메시지를 어떻게 처리하는지 썼습니다
----------------------------------------수신 쓰레드 부분--------------------------------------
while( read( clnt_socket, message, sizeof(message) !=0 )
{
메세지 처리
}
----------------------------------------------------------------------------------------------
여기 의문점이 있는게 만약에 클라이언트가 close()함수를 써서 서버에 연결종료메시지를 보내면 단지 그클라이언트만 연결이
종료되고 서버는 계속 동작하면서 다른클라이언트들의 연결요청을 받아주는거라고 생각했습니다.
그런데 클라이언트에서close를 사용해서 종료메시지를 보내면 서버까지 종료되게 됩니다. 메인에서 while문을 돌고있는데 왜 종
료가 되는지 궁금합니다. 아 그리고
또 수신쓰레드에서 while( read( clnt_socket, message, sizeof(message) !=-1 ) 이렇게 처리하면 제가 원래 생각했던대로 그
클라이언트만 연결을 끊고 서버는 계속 다른 클라이언트들의 연결요청을 받아주네요.
책에서 보기에는 close함수로 연결종료를 하면 read함수는 0을 리턴한다고 설명이 나와있는데...
혼란스럽네요. 고수분들 정리좀 한번 부탁드려요. 책한권으로 의지하면서 공부하니까 알수없는 의문점들만 늘어가네요.
고수분들 도와주세요ㅜ.ㅜ