외부 스레드에서 recv()을 풀어주는 방법이 있을까요?
글쓴이: rma8806 / 작성시간: 금, 2013/03/15 - 1:21오후
소켓을 가지고 서버를 구현하고 있습니다.
구상하는 동작 방법은..
스레드 하나가 recv()으로 블럭을 하고 있다가,
외부 스레드에서 약속된 버퍼에 메시지를 채워넣고 신호를 보내면 수신된 메시지가 없더라도 recv()의 블럭킹이 풀려서 send 동작을 수행하고
다시 recv으로 수신대기를하는 방법으로 통신 매커니즘을 구현 하고 싶습니다.
(사실 윈도우에서 ThreadMessage에 반응하는 콜백함수로 CSocket::Receive(..)의 블럭을 푸는 방법으로 개발 한적이 있습니다.)
사실,
int recv(int s, void *buf, size_t len, int flags);
에서, flags에 MSG_DONTWAIT을 넣어주고 1ms간격으로 계속 수신된 메시지를 감지 하는 방법도 가능은 하지만
주기적으로 감시하는대 비용이 많이 들것 같아서, 외부 스레드에서 특정 소켓을 사용해서 호출한recv()을 푸는 방법을 제공 해주는지 질문을 드립니다.
여기 고수님들은 어떻게 하시는지요?
Forums:
(epoll() or poll() or select()) + pipe()
(epoll() or poll() or select()) + pipe()
댓글 달기