리눅스 프로그래밍에서 ctrl+c 시..

luftpalen의 이미지

소켓프로그래밍을 하면서 디버깅시에 ctrl+ c 로써 프로그램을 종료해야할 일이 번번히 발생하는데, 소켓이 제대로 안닫혀서 다음 디버깅시에 bind error 가 뜨곤합니다. 이는 시간이 해결해주지만, ctrl+c 시에 close(sock_fd) 와 기타 메모리관리를 실행시키면서 종료할 수 있는 방법이 있는지요.. ?

원래 검색의 생활화가 신조이지만, 시그날이라고 하는것같은데 정확히 몰라서 검색을 못해 이렇게 올립니다. (알아야 검색도.. :( )

kdoll의 이미지

시그널을 잡아주세요.. SIG_INT 터미널/콘솔에서 ctrl+c시

SIG_INT가 떨어지는 것으로 알고 있습니다..

자세한 것은 man sigaction

stania의 이미지

luftpalen wrote:
소켓이 제대로 안닫혀서 다음 디버깅시에 bind error 가 뜨곤합니다.

소켓을 제대로 닫지 않고 프로세스를 종료 한 뒤 다시 수행했을 때 해당 포트에 대해 bind 가 안되는 문제는

    int option;
    option = 1;
    setsockopt( this->soc, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) );

를 bind 직전에 수행시켜주는 것으로 해결할 수 있습니다.

원인은, (아마도 TCP)소켓을 사용하는 프로그램이 비정상적으로 종료되었을 경우, 반대쪽 프로세스(혹은 원격 호스트)가 보내는 커넥션 종료 신호를 기다리기 위해 소켓을 일정시간동안 더 열어두기 때문입니다.

그럴 염려가 없다면 위의 코드를 bind 직전에 넣어서 문제를 해결할 수 있습니다. 자세한 내용은 위의 코드에 대해 맨페이지님께 물어보십시오 :)

익명 사용자의 이미지

반대쪽의 어떤 능동적 작용을 기다리기 보다는, 자신이 종료이전에 보낸 패킷에 대해 수동적인 책임을 지기 위함입니다.(그 패킷이 망에서 소멸될 시간을 대기하는 것이지요. 그 패킷이 라우터 또는 peer에서 소멸/처리된다면, 이때 이에 대한 응답패킷이 오게되겠지요. 이때, 이를 수신할 프로그램은 이미 종료되었으나, 커널이 그 책임을 지는것입니다. 뒷감당한다고나 할까?)
책임을 지는것이 정당한 방법이며, 임의로 linger옵션을 주어 그 대기시간을 강제 조절할 수 있습니다.( setsockopt(), SOL_SOCKET, SO_LIGER참조)

특정한 경우를-이를테면, 나는 중요한 서버고, TIME_WAIT 할 자원조차 아껴야 한다면- 제외하고는 SO_REUSEADDR이 보다 나은 방법으로 보입니다.

댓글 달기

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