signal의 sa_hanlder에 관하여~

kn31232의 이미지

signal 인터럽트시 발생되는 핸들러를 정의하는 곳으로 알고 있습니다.

이곳으로 int형 signal신호가 들어가는 데여...

이 핸들러로 이 signal신호 외에 다른 값도 함께 넘겨 줘야 할꺼 같은 상황이 발생했는데...

방법을 찾을 수 가 없습니다....

전역변수로 선언도 해봤지만..음....나중에 클라이언트 신호 해제 순서에 따라서 fd에러가 발생하더군요...

각 쓰레드에서 발생한 fd를 sa_hanlder로 넘겨줘야 하는데...

고수님들...방법좀 알려 주십시요...TT_TT

그럼 환절기 감기 조심하시구요...답변 기다리겠습니다~! ^^

pynoos의 이미지

이놈의 signal 이라는것이, 외부에서도 날아 올수 있는 지라, kernel에서 process간 전달하는 중에 뭔가 다른 것도 따라 갔으면 하지만, 워낙 오래된 것이라 없습니다.

따라서, signal 관련해서 아무리 눈을 씻고 찾아 봐도 방법이 없습니다.

어떤상황에서 어떤 signal 값을 사용하는지 상황을 설명해 주세요.

thread 간에 뭔가 전달할 것이라면, 굳이 signal 을 사용하지 않아도 방법이 있을것 같습니다.

kn31232의 이미지

음~ 서버 클라이언트 프로그램을 짜고 있는데요~

서버는 유닉스 클라이언트는 자바 애플릿입니다....

서버에서 pthread를 사용하여 클라이언트에서 접속 요청이 왔을때

쓰레드를 하나 생성시켜 클라이언트의 접속 요구에 응하도록 만들었지요..

음~ 문제는 자바 애플릿을 띄어놓은 웹 페이지를 강제 종료시켰을경우 SIGPIPE 가 발생해서 이 signal이 발생했을때 그 쓰레드의 클라이언트와 연결 시켜놓은 공유 메모리 부분과 소켓부분을 닫아야 하는데..(꼭 닫아야 하나요? 이것도 의문...ㅡ.ㅡ; 쓰레드 종료시킬때 다 되지 않을까 하는...ㅋ 말도 안돼나요? ^^;)

이 소켓 fd와 공유메모리 fd를 넘겨 주고...음...signal_handler로요...

여기서 소켓이랑 공유 메모리랑 닫고...pthread_exit를 시키면 깨끗해 질꺼 같아서요...ㅡ.ㅡ;;

지금은 임의로 그냥 쓰레드 종료만 시키고 있구요....음...뭐 이렇게 해도 표면적으론 아직 아무 문제가 없어보기긴 하지만...뭔가 찜찜해서...^^;

그럼 답변 기다리고 있겠습니다!! ^^

飛上

pynoos의 이미지

SIGPIPE는 reset 된 socket에 대하여, write 할때 발생합니다. read 할때는 발생하지 않죠.

문제를 잘 생각해보면, applet이 요청한 다음 결과를 기다리다가 죽었고, 서버는 그 사실을 모른 채 write ( send ) 를 한 경우 같습니다.

쓰기전에 select 를 이용하여 send 가능한지를 본 다음 send 하시는 것이 좋을 것 같습니다.

select 의 두 번째 FDSET에다가 잘 넣어 주세요.

kn31232의 이미지

우선 답변 감사드립니다~! ^^

헤헤~ 별로 실력이 없다보니....머리 나쁘면 몸이 고생한다고....ㅎ

님께서 설명해주신 SIGPIPE의 발생 원인에 대해서는 알고 있었습니다 ^^

여기저기 자료를 찾아보고 말이죠....하지만 select라는 함수가 이런데서 사용될줄은 몰랐네요 ^^;

초보 프로그래머라...TT_TT

죄송하지만 마지막에 님께서 해주신 말이 잘 이해가 안되는데요...^^;;

select의 두번째 FDSET에다가 뭘 잘 넣으라는건지.....^^;;

飛上

linuxqna의 이미지

int select(int maxfdp1, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *tvptr);

에서,
3번째 writefds 구조체에다가
자바애플릿 클라이언트가 접속되어온 socket fd를

FD_SET(클라이언트 socket fd, &writefds)

을 뜻하시는것 같습니다.

댓글 달기

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