Socket Process ... ESTABLISHED

ycode의 이미지

At first, sorry for writing in poor english.
I could not type in korean, and faced to emergency now.

Question :

I have S/C program using socket.
I found forked child server process did not exit - usually exit well.
so, when i checked netstat, status was " ESTABLISHED"!!!

Anyone can tell me, how can figure out this?

Then, Is it ok having question like this?

sunyzero의 이미지

ycode wrote:
At first, sorry for writing in poor english.
I could not type in korean, and faced to emergency now.

Question :

I have S/C program using socket.
I found forked child server process did not exit - usually exit well.
so, when i checked netstat, status was " ESTABLISHED"!!!

당연히 접속이 되어있으면 ESTABLISHED 로 나옵니다. child프로세스가 종료하지 않는 것은 그 안에 recv함수나 혹은 그와 같은 기능을 하는 함수에서 블록킹을 하기 때문이겠죠. 접속이 끊어지면 0를 리턴하므로 그것을 체크해서 빠져나오시면 됩니다. 현재 상황은 아주 정상적인 상황인듯 싶군요. 클라이언트 프로그램이 계속 접속하고 있는데 그것을 꼭 서버가 끊어야 하는 상황이 아니면 정상적으로 보입니다.

또한 자식 프로세스가 죽을 때 SIGCHLD가 나오므로 wait로 체크해서 자원을 거두어 들여야 하며, 이것을 하지 않을때 <defunc>프로세스가 생기게 됩니다. 만일 이것이 귀찮다면 SIG_IGN으로 SIGCHLD를 무시해버리면 됩니다.

그리고 C/S프로그램이라고 하다고 S/C라고 하니 어감이 조금 이상하네요. ^^*

========================================
* The truth will set you free.

ycode의 이미지

Thank you for quick reply!

child프로세스가 종료하지 않는 것은 그 안에 recv함수나혹은 그와 같은 기능을 하는 함수에서 블록킹을 하기 때문이겠죠. 

This is what i wanted to know. Thanks a lot.
Then, if my program was client? and server PG did not receive any data? Server and Client, which side is wrong? What reason make this condition?

또한 자식 프로세스가 죽을 때 SIGCHLD가 나오므로 wait로 체크해서 자원을 거두어 들여야 하며, 이것을 하지 않을때 <defunc>프로세스가 생기게 됩니다. 만일 이것이 귀찮다면 SIG_IGN으로 SIGCHLD를 무시해버리면 됩니다.

Yes, it's already done.

그리고 C/S프로그램이라고 하다고 S/C라고 하니 어감이 조금 이상하네요. ^^*

It really does ... I was not in my right mind. sorry ^^;;;

sunyzero의 이미지

특정 connection이 아무런 일도 하지 않는 것인데 세션을 계속 열고 있는 것을 방지하기 위해서 일부러 몇가지 규약이 필요합니다. 일단 보편적인것 두가지를 나열하겠습니다.

1. heartbeat
이것은 특정 시간마다 패킷을 보내서 서로 살아있음을 응답하게 하는것입니다. 응답하지 않으면 예외시간을 다시 두고 응답을 요구한뒤 그래두 없으면 강제종료 시켜버리죠.

2. timeout
이것은 그냥 timeout을 설정합니다. 일단 기본적으로 가장 쉽게 구현하기 위해서는 select와 같은 것으로 time아웃을 걸고 해당 시간이 지났는데 응답이 없는 녀석들은 모조리 숙청하는것이죠.

이 두가지가 보통 사용합니다. 개인적으로 신뢰성을 생각한다면 1번이 더 좋다고 생각됩니다.

========================================
* The truth will set you free.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.