thread 생성시 interrupt 에서...
글쓴이: zombie007 / 작성시간: 화, 2003/10/14 - 2:09오후
안녕하세요...
간단한 서버 테스트를 위해.. 클라이언트에서 thread를 1000개 생성하여..
서버에 connect하는 테스트를 하고있는데여....
thread를 한 200여개 생성을 하면..
pthread_create() 함수에서
interrupted system call 에러를 내면서 중단 됩니다..
또 한번은 Broken pipe라는 에레를 내면서 중단 됩니다..
왜이런 현상이 일어나는지여....
밑에 있는 코드는 쓰레드 함수입니다...
고수님들의 조언 부탁드립니다... ^^
void *client_thread(void *cli_info) { int sockfd; struct sockaddr_in server; char send[100] = {0,}; if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror(" socket error:"); exit(-1); } memset(&server, 0x00, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(port); server.sin_addr.s_addr = inet_addr(ip); if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) { perror(" connect error:"); exit(-1); } //sleep(40); while(1) { send[0] = make_rand(); sleep(5); strcpy(send, "Test Packet"); write(sockfd, send, 100); } close(sockfd); pthread_exit((void *)NULL); } int make_rand() { int i; srand(time(NULL)); i = (1+ rand() % 120); return i; }
Forums:
[quote="zombie007"] Broken pipe라는 에레를
SIGPIPE 시그널이 받았습니다.
기본적으로 프로세스 종료를 합니다.
시그널 핸들러를 재정의 하세요.
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
제 생각으로는 thread 생성 실패 때문에 문제가 발생하는거 같습니다.
제 생각으로는 thread 생성 실패 때문에 문제가 발생하는거 같습니다. 200개라고 했지만 아마 255정도 생성하다가 실패한거 같습니다.
지금의 현상은 아마 서버에서 accept를 한후 thread를 띄울때 255개를 넘어서 pthread_create가 실패할겁니다. 그러면 클라이언트에서 끊어진 socket에 write하여 broken pipe가 생기는것으로 추정됩니다.
우선 서버나 클라이언트쪽의 Thread 생성 개수 제한에 걸리는지 확인해 보세요.
만약 걸리면 개수를 증가시켜서 테스트해보세요.
댓글 달기