서버에서 데이터 시그널을 못받는 경우도 있나요?

jwy22의 이미지

안녕하세요.
서버는 커널 2.4 버전의 RTS + thread Pool을 기반으로 만들어졌습니다.

.
.
소켓 생성
.
.
    if (setup_sigio (nListenFd, signum, getpid()) == -1)
        msg.ErrMsg ("setup_sigio error");

    sigemptyset (&set);
    sigaddset   (&set, SIGRTMIN+signum);
    sigprocmask (SIG_BLOCK, &set, NULL);

    msg.LogMsg ("Accept Thread [pid:%d] started..........", getpid());

    pthread_mutex_lock   (&sync_lock);
    pthread_cond_signal  (&sync_cond);  /* Notify sync_cond signal to main() */
    pthread_mutex_unlock (&sync_lock);

    while (1) {

        ret = sigwaitinfo (&set, &si);     /* waiting for any connection */

        if (ret    == SIGRTMIN+signum) {
         .
         .
              if (si.si_fd == nListenFd) {
                 소켓 연결 accept
             }
             else {
                 로그인 처리
             }
         .
         .
             }
         }

서버가 실행하면 listen 으로 소켓의 접속을 기다립니다.
sigwaitinfo 함수에서 시그널을 기다리다가 클라이언트로부터
소켓 접속이 있으면 위에 보시는 루틴을 한번타서 소켓 연결(accept)을 시키고 새로운 소켓으로 연결을 넘겨줍니다.
클라이언트에서 는 connect 뒤에 바로 소켓에 로그인에 필요한 정보를 보냅니다. (클라이언트에서 connect 후에 바로 send를 합니다.)

( 클라이언트에서 소켓 connect 시에 시그널 한번 발생)
( 해당 클라이언트와 연결된 소켓으로 값이 들어오면 시그널 발생)
이렇게 두번 시그널이 들어와서 처리합니다.

문제는 어쩌다가 한번씩 서버에서 클라이언트의 소켓 연결에대한 시그널만 받아 처리하고 해당 시그널에서 생성된 소켓으로 들어오는 데이터를 인식하지 못하는 경우가 생겼습니다.(서버에서는 시그널이 안들어 온것으로 인식)

처음에 생각하기로는 단순한 네트워크 장애로 판단했으나 그럴 가능성은 매우 희박하다고 생각합니다.

RTS 서버라서 서버에 잘못된 값이라도 시그널 값이 들어와야 그다음 동작을 하는 것으로 알고 있습니다.
제가 알고 싶은것은 sigwaitinfo 함수가 제대로 동작 안할 경우도 있는건가요?
만약 그럴 경우가 없다면... 어떤 문제로 생각해 봐야 할까요?
관련 자료를 찾아보는데 그런 내용은 아직 못찾았습니다.
제가 참고할만한 사이트나 이런것을 겪어 보신 분이 계시면 조언 부탁드립니다.
참고로 sigtimedwait() 함수도 제대로 작동하지 않았습니다.
답변 미리 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.