libevent 사용시 hang 이 발생하는 이유는????

trymp의 이미지


환경: ubuntu 2.6.38-8-generic linux

위의 상태에서 socket listen() 을 하는 프로그램을 만들었습니다. (libevent-2.0.19-stable 사용)

그냥 accpet() 를 하고 close() 로 바로 끊는 프로그램인데요..

다수의 client 에서 무한 loop 에서 connect() 를 시도했습니다.

그래서 많은 양의 TCP connect 가 생기고 끊기도록 해 놓았습니다.

근데 한 1~2분 정도 돌리니까 hang 이 생깁니다.

debug용 printf 을 찍어 놓았는데, 5~10초간 멈추었다가 다시 또 진행합니다.

이러한 현상이 잘 일어나고요..

이게 libevent 가 안 좋아서인지 아니면 다른 문제가 있는 것인지 궁금합니다.

간략하게...

    base = event_base_new();
 
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_port = htons(30000);
 
    listener = evconnlistener_new_bind(base, accept_cb, NULL,
                        LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE, -1,
                        (struct sockaddr*)&sin, sizeof(sin));
 
accept_cb() 에서 -> close(sockfd)

위와 같이 했다고 왜 hang 이 생기죠..???

고수님들의 조언 부탁드립니다.

익명 사용자의 이미지


커널에서 생성할수 있는 최대 커넥션 수를 초과한건 아닐까요??
netstat 명령어로 확인해 보세요..