소켓 통신에서 순차적으로 recv와 send를 하지 않고...
어느때고 recv와 send요청이 왔을때 사용 할 수 있도록 코딩 하려면 어떻게 해야 할까요....!?
보통 recv요청을 기다리고....recv했을때 send하고...이런식의 코딩만 한거 같네요....-_-;
요청이 들어왔을때 반응하도록 하려면 어떻게 해야하는지 궁금합니다...TT_TT
고수님들~~~!! ^^
select, signal i/o, epoll, kqueue(이건 FreeBSD) 같은 것들을 한번 찾아보세요.
그럼 고운 하루
========================= CharSyam ^^ --- 고운 하루 =========================
select 나 poll을 ㅇㅣ용합니다.
1. socket fd 를 얻는다..( 서버의 경우 accept로 얻고..클라이언트는 connect 등으로 얻겠죠. 암튼 서버/클라이언트의 연결된 socket fd를 얻어낸후..)
2. 1에서 얻은 fd를 가지고 poll이나 select에 넘겨주어.. 이벤트가 일어나면 .. 그때 recv 합니다.
컴퓨터 프로그램이란 결국 어떤 것을 기다리고, 그것을 처리한 후 다시 기다리는 것의 연속입니다.
네트 워크 프로그램에서는 기다리는 것이 주로 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에 대한 것을 동시에 기다리는 것은 그리 많지 않습니다.
---http://coolengineer.com
recv()와 send() 함수는 소켓은 하나지만 socket buffer는 독립적으로 가지고 있기 때문에...
그냥 별개의 스레드로 구현하셔도 됩니다.
recv()만 하는 스레드와 send()만 하는 스레드 두개를 만들어서 외부에서 보내는 패킷은 recv thread에서 알아서 처리하고 내부에서 보내는 패킷은 send thread에서 처리하는 형태로 하시면 됩니다.
man page를 보시면 두 함수 다 MT-Level에 Safe 합니다...
세상은 하나..........
텍스트 포맷에 대한 자세한 정보
<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]
select, signal i/o, epoll, kqueue(이건 Fre
select, signal i/o, epoll, kqueue(이건 FreeBSD) 같은 것들을 한번 찾아보세요.
그럼 고운 하루
=========================
CharSyam ^^ --- 고운 하루
=========================
select 나 poll을 ㅇㅣ용합니다.1. socket fd 를
select 나 poll을 ㅇㅣ용합니다.
1. socket fd 를 얻는다..(
서버의 경우 accept로 얻고..클라이언트는 connect 등으로 얻겠죠.
암튼 서버/클라이언트의 연결된 socket fd를 얻어낸후..)
2. 1에서 얻은 fd를 가지고 poll이나 select에 넘겨주어..
이벤트가 일어나면 .. 그때 recv 합니다.
컴퓨터 프로그램이란 결국 어떤 것을 기다리고, 그것을 처리한 후 다시 기
컴퓨터 프로그램이란 결국 어떤 것을 기다리고, 그것을 처리한 후 다시 기다리는 것의 연속입니다.
네트 워크 프로그램에서는
기다리는 것이 주로 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에 대한 것을
동시에 기다리는 것은 그리 많지 않습니다.
---
http://coolengineer.com
recv & send
recv()와 send() 함수는 소켓은 하나지만 socket buffer는 독립적으로 가지고 있기 때문에...
그냥 별개의 스레드로 구현하셔도 됩니다.
recv()만 하는 스레드와 send()만 하는 스레드 두개를 만들어서 외부에서 보내는 패킷은 recv thread에서 알아서 처리하고 내부에서 보내는 패킷은 send thread에서 처리하는 형태로 하시면 됩니다.
man page를 보시면 두 함수 다 MT-Level에 Safe 합니다...
세상은 하나..........
댓글 달기