소켓전송시 perror메세지가 Interrupted system call이 뭔가요?

버그소년의 이미지

리눅스에서 제작된 소스를 가지고 솔라리스에서 컴파일해 봤습니다.

리눅스에서는 이러한 문제가 없는데 솔라리스에서 문제가 발생합니다.

빈번한 소켓통신을 하던 도중 시그널을 날려 다른 작업을 시키는 과정에서

send과정에서 -1을 리턴합니다.

perror로 찍은 메세지는 " Interrupted system call" 이라고 나오는데 이것이

무슨 의미인지 잘 모르겠네요..

mach의 이미지

유닉스/리눅스는 blocking 시스템 호출이 있습니다.
전형적인 예가 select(), accept(), connect(), send(), recv()등인데요.
blocking system call들은 해당기능를 수행하기 까지는 멈춰있다는
의미로 해석해도 무방하겠습니다.
blocking system call은 다음의 상황에서 빠져나오게 됩니다.
1. 기능수행성공
2. 기능수행실패
3. 시그널을 받음

님의 경우에는 3번에 해당한다고 볼 수 있습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

버그소년의 이미지

답변 감사드립니다.

제 경우가 3번, 시그널을 받은경우라 하셨는데..

조금 막연한 질문이긴 하지만 보통 어떠한 경우에 시그널을 받는지 궁금합니다.

가끔은 밥을 굶어도 살 수 있다.

mach의 이미지

버그소년 wrote:

조금 막연한 질문이긴 하지만 보통 어떠한 경우에 시그널을 받는지 궁금합니다.


시그널의 소스
1. 커널 : sleep(), alarm()등을 사용하면, 커널이 해당 시스템호출에 대해 조건이 만족되면 시그널을 준다. 예를들어, 소켓연결의 경우 원격지가 연결을 단절하면, SIG_PIPE라는 시그널을 발생시킨다. 다시 말하자면 커널이 SIG_PIPE라는 시그널을 해당 소켓을 열고 있는 프로세스에게 보낸다.
2. 프로세스 : 다른 프로세스에서 signal()을 사용해서 준다. shell의 경우에는 사용자가 Ctrl+C를 누르면 이를 시그널을 보내라는 의미로 인식하고 shell이 해당 프로세스(foreground에서 수행중인)에게 시그널을 날린다. 또는, 사용자가 kill이라는 유틸리티를 이용하여 시그널을 보낼수도 있다.

시그널의 종류는 다양하며, blocking system call은 시그널의 종류에 관계없이 인터럽트된다.

따라서, blocking system call을 사용하는 프로그램에서는 시그널핸들링 루틴을 필수적으로 작성하여 처리하도록한다.
또한, c로 프로그램하는 경우, blocking system call을 수행한 후에는 반드시 시그널에 대한 비교 판단루틴(if문으로)이 따라붙어주어야한다
에구, 쓰다보니 문어체가 되어버렸네요. 하여간 보탬이 되시길......

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

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