CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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!
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.