[ CnUnix ] in KIDS 글 쓴 이(By): ymir (Mizz) 날 짜 (Date): 2005년 11월 21일 월요일 오후 09시 33분 22초 제 목(Title): [Q] mysql api 프로그램에서.. ;;; Redhat Linux9 에서 C 로 간단한 mysql api 데몬을 하나 짰습니다. (MySql 4.1.14) 대략적인 구조는 아래와 같습니다. // daemon process do_query() { MYSQL m; mysql_init(&m); mysql_real_connect(&m, ...); ..query.. mysql_close(); } main() { ..socket.. while (1) { newsockfd=accept(sockfd, ...); if (newsockfd) { read_request_from_client(); do_query(); send_result_to_client(); } close(newsockfd); } } 제가 만든 client 를 실행하면.. client 는 daemon 에 접속해서 request 를 날리고, daemon 은 그걸 받아서 query 한 후에.. 그 결과를 다시 client 에 돌려 주는 겁니다. 근데 이게 좀 이상한게.. 처음 client 를 실행하면 정상적으로 결과를 리턴하는데.. 두번째 실행하게 되면, mysql_real_connect() 에서 블럭됩니다. strace 로 잡으니까.. 아래 connect 에서 계속 블럭되더군요.. connect(5, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("192.168.1.111")}, 16) = 0 이때, daemon 혼자 cpu 를 다 먹고 있고.. DB 서버로의 커넥션은 잠깐 ESTABLISHED 였다가 곧바로 CLOSE_WAIT 으로 변한 상태로 있습니다. client 가 접속하지 않은 상태에서는.. daemon 내에서 do_query() 를 여러번 호출해도.. 아무런 이상이 없습니다. 음.. mysql api 는 처음이라... 간단하게 만들어 본건데.. 처음부터 막히니 이거 난감하네요... ;; 이게 왜 그런건지 혹시 아시는 분 계시면 도움 말씀 부탁드립니다. 고맙습니다. 추가 > 다시 확인해 보니.. accept(); .... close(newsockfd); 가 한번이라도 호출 된 후에는, mysql_real_connect 가 블럭되네요..;; Oh, I do believe everlasting love and destiny to meet you again I feel a pain I can hardly stand all I can do is loving you - *Mizz* the Magic Knight! |