Broken pipe 에러 해결하는 방법을 알고 싶습니다.

jagalchee의 이미지

간단한 서버-클라이언트 소켓 프로그래밍을 하고 있습니다.

클라이언트에서 원하는 영어 단어를 서버에 보내면, 서버에서 영어 단어를 검색해서 클라이언트에게 보내주는 간단한 것입니다. 서버에서는 영어 단어 검색을 위해서 popen() 함수를 사용하고 잇구요..

헌데, 서버와 클라이언트가 접속된 상태에서 클라이언트 측에서, Ctrl + c 를 누르면, 서버가 Broken Pipe 에러가 나면서, 서버가 죽어버립니다.

여기서 말하는 파이프가 깨졌다는 의미는 서버와 클라이언트 사이의 소켓 연결이 비정상적으로 종료되었다는 의미인가요? 아니면, 서버에서 popen() 으로 생성한 파이프가 깨졌다는 의미인가요? 그리고 왜 이런현상이 생기는 것인지도 알고 싶고, 어떻게 하면 이를 해결할 수 있는지도 알고 싶습니다.

alsong의 이미지

SIG_PIPE로 검색해보세요.

클라이언트에서 강제종료해서 발생했고
SIG_PIPE 디폴트 핸들러를 변경하시면 됩니다.

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.

zflute의 이미지

일단 Broken Pipe라는 메세지와 함께 프로세스가 죽는 것은 popen에서 발생하는 것이 아니라 소켓에서 발생합니다. 클라이언트에서 일방적으로 접속을 종료하면 서버쪽에서는 알지 못하고 클라이언트와 연결되어 있던 소켓으로 데이터를 전송하려고 합니다. 하지만, 그 소켓으로는 실제로 전송을 할 수 없기 때문에 broken pipe라는 시그널이 커널로 부터 발생하고 서버 프로그램은 그 시그널에 대해서 처리하는 루틴이 따로 없기 때문에 종료하게 됩니다.

간단하게는,

signal(SIGPIPE, SIG_IGN);

부분을 서버 시작 부분에 넣어주면 됩니다.

liongo의 이미지

시그널 무시하는방법도 있지만.

그발생을 아예 차단하시것도 방법입니다.

서버가 끈어진 소켓에다 send를 할경우 발생하는것

같습니다.. 끈어진 소켓은 send를 안하게 하면 발생하지

않겠죠? ㅡㅡa

' 형식이 내용을 규정한다. '

댓글 달기

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