CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): HellCat (Nobody)
날 짜 (Date): 2003년 3월 12일 수요일 오전 01시 47분 29초
제 목(Title): Re: [Q] Signal Handler 에서 Bus Error..


제 경우는 대게 ASYNC IO 를 SIGIO 하고 많이 쓰는데요 그게 그냥 편해서..

어쨌던.. 일단 대충 구조는 

void sig_term (int sig)
{
  /* 만약 signal () 을 쓰면 signal 을 ignore 해줘야 하구요..*/
  /* sigset 을 쓰면 자동으로 handler 시작전에 signal mask 가 되니 *
  /* 아무것도 안해도 되구요.. - use sigset() whenever possible*/
  kill_all_children ();

  ...
}

그리고 제경우는 SIGCHLD 왼만해서 쓰지 않아요.

뭐 대충
sigset (SIGTERM, sig_term);
sigset (SIGPIPE, sig_term);
sigset (SIGINT, sig_term);
...

그리고..
while (1) {
    sockfd = accept (..);
   .... error check ...

   if ((child = fork()) == -1)
    {
      close (sockfd);
      /* this can be critical error - so exit?? */
    /* or maybe you should maintain accept'ed client counter */
    /* so that you can limit # of children */
   ...
    }

    if (child == 0)
    {
      /* close all other unnecessary FDs including listening sockets ..*/
     /* then, set all the signal handler to DEFAULT!*/
    /* 다시 말해서 자동으로 parent process 한테 물려 받은 것 없애주기.*/
   ... do some work here ..

      shutdown (sockfd, 2);
      /* maybe need some linger option when socket was created ? or put 
some sleep() delay here? */

      exit (0); /* so that parent can check the return code */
    }

    /* Now parent */
    while ((pid = wait (&w)) > 0)
      {
        /* some process terminated */
        ... check the value of 'w' and see if it was clean exit or error 
exit?
      }

    if (pid == -1 && errno == EINTR)
      {
/* this shouldn't happen unless the expected signals were received
  such as SIGTERM, SIGINT... etc.. */
.. so probably ready to shutdown or break out of the loop?
      }

    if (pid == -1 && errno == ECHILD)
      {
        /* No children and notthing to do ..*/
      }
   }




이거 그냥 온라인으로 키즈 에디터로 생각나는 대로 썼더니 뭐 줄도 잘
않맞고 하여간 대충 알아서 보세요:)

그리고 ASYNC socket 쓰면 훨씬 편해지고 더 효율적이 되지요.

예를 들면 wait() 가 애들 없다고 ECHILD errno 줄때

  pause(); 같은거 걸어놓고 쉴수 있으니까요.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.