recv와 send..

kn31232의 이미지

소켓 통신에서 순차적으로 recv와 send를 하지 않고...

어느때고 recv와 send요청이 왔을때 사용 할 수 있도록 코딩 하려면 어떻게 해야 할까요....!?

보통 recv요청을 기다리고....recv했을때 send하고...이런식의 코딩만 한거 같네요....-_-;

요청이 들어왔을때 반응하도록 하려면 어떻게 해야하는지 궁금합니다...TT_TT

고수님들~~~!! ^^

charsyam의 이미지

select, signal i/o, epoll, kqueue(이건 FreeBSD) 같은 것들을 한번 찾아보세요.

그럼 고운 하루

=========================
CharSyam ^^ --- 고운 하루
=========================

moonzoo의 이미지

select 나 poll을 ㅇㅣ용합니다.

1. socket fd 를 얻는다..(
서버의 경우 accept로 얻고..클라이언트는 connect 등으로 얻겠죠.
암튼 서버/클라이언트의 연결된 socket fd를 얻어낸후..)

2. 1에서 얻은 fd를 가지고 poll이나 select에 넘겨주어..
이벤트가 일어나면 .. 그때 recv 합니다.

pynoos의 이미지

컴퓨터 프로그램이란 결국 어떤 것을 기다리고, 그것을 처리한 후 다시 기다리는 것의 연속입니다.

네트 워크 프로그램에서는
기다리는 것이 주로 socket 접속이면, 서버가 될 것이고,
기다리는 것이 사용자 입력이면 클라이언트가 될 것입니다.

문제는 동시에 대기해야할 것이 socket과 IPC 객체일 경우와 같이
동시에 대기 할 수 없는 경우가 생기는데 있습니다. (Windows Programming의 경우 Event를 통해 가능하지만..)
이경우에는 주기적으로 polling하는 수 밖에 없지요.

논의의 대상인 recv와 send 요청이 동시에 온다는 것에서 send 에 대한 것은

1. non-block IO에서 send 가능 한 상태가 되는 경우와
2. relay 성 server에서 다른 recv에 대한 send 일 경우
3. 타 thread에 의해 전송할 내용을 IPC 객체등을 통해 전달 받았을 경우

등 입니다.
1 번을 제외 한다면, 결국, send 에 대한 것과 recv에 대한 것을
동시에 기다리는 것은 그리 많지 않습니다.

ssoo76의 이미지

recv()와 send() 함수는 소켓은 하나지만 socket buffer는 독립적으로 가지고 있기 때문에...

그냥 별개의 스레드로 구현하셔도 됩니다.

recv()만 하는 스레드와 send()만 하는 스레드 두개를 만들어서 외부에서 보내는 패킷은 recv thread에서 알아서 처리하고 내부에서 보내는 패킷은 send thread에서 처리하는 형태로 하시면 됩니다.

man page를 보시면 두 함수 다 MT-Level에 Safe 합니다...

세상은 하나..........

댓글 달기

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