소켓프로그래밍 fork에 대하여 질문 있습니다!!!
요즘 TCP/IP 소켓 프로그래밍 책을 열심히 보면서 공부중인 학생입니다 :-)
이번에 해보려고 하는게,
fork를 사용하여 자식프로세스를 생성하는데,
클라이언트가 10개 이상이 되면 더이상 fork 를 생성하지 않고, 클라이언트에 연결요청 실패를 전달하고
클라이언트를 종료합니다.
클라이언트 종료는 클라이언트 프로그램 자체에서 exit(1)을 사용해서 했는데,
여기서 문제가 자식 프로세스가 10개만 생성한다고 했을때,
부모프로세스에서 fork가 한번 호출될때마다 변수를 하나 선언해서 그 값을 올려주고,
그 값이 10 이상이 되면 연결요청 실패를 말하면 되잖아요~
근데, 만약 클라이언트에서 연결을 끊었을때는 이제 9개의 연결이기때문에,
한자리가 비어서 fork 하나를 더 생성할수 있어야 하는데,
부모프로세스가 가지고 있는 변수와 자식프로세스는 다른 메모리에 있기때문에 공유가 안되잖아요!
그러면 어떻게 해야 할까요?
한마디로 한가지 값을 공유해야 하는데, 그게 파이프라는 이야기를 들었습니다.
파이프 말고는 다른 방법은 없나요?
또, 파이프로 메모리를 공유했더니,
다른 2번째 클라이언트부터는 접속이 되지 않다가, 첫번째 클라이언트가 접속을 종료해야 접속이 됩니다. ㅡㅡ;
메모리를 공유하게되면 모든 자식프로세스와 공유할수는 없는건가요?
한번에 10개가 접속이 되는게 목표인데; 이건뭐.. ㅡㅡ 결국은 한개한개가 접속되는 상황이니 ..;
그리고! 또 궁금한게 있는데, listen(serv_sock,5) 함수가 있잖아요?
이게 연결요청대기상태라는 하는데 ㅡㅡ; 여기서 5는 왜 쓰이나요!!
제가 0도 해봤고, 1도해봤고, 다 해봤는데 무조건 접속이 됩니다 ;
숫자는 뭘 의미하는건가요? ㅜㅜ
파이프보다는..
자식 프로세스가 끝났을때 보내는 신호를 받아서 처리하시면 될겁니다
wait또는 waitpid를 참고하세요
모두를 위한 하나이지만, 하나를 위한 모두이지는 않다.
댓글 달기