오전 12:29 2002-02-19
조경민 bro@shinbiro.com
넌블러킹 I/O중 WSAAyncSelect이용시 OnSend 이벤트 가상으로 발생시키기
======================================================
가상으로 FD_SEND를 발생시켜야 할때가 종종있다.
보내야할 데이타를 OnSend가 호출될때만 보내게 하면
WSAEWOULDBLOCK을 염려하지 않아도 되기 때문에 버퍼링된
보내야할 데이타를 리스트로 관리한후 OnSend에서 일괄
보내기를 시도하는 것이다. 만일 보내야할 데이타가 생겨서
다시 FD_WRITE를 가상으로 보내야 한다면 아래처럼 해야한다.
물론 넌블러킹 I/O중 윈도우 메시지를 이용한 WSAAyncSelect시 말입니다.
( WSAEventSelect 방식에서는 가상의 Send 이벤트를 발생시켜야 합니다. )

처리할
if(WSAAsyncSelect(m_s, hWnd, WM_ASYNC,                 FD_READ|FD_WRITE|FD_CLOSE) == SOCKET_ERROR)   {
이렇게 넌블러킹 I/O로 했다면
가상으로 FD_WRITE를 발생시키기 위해서는
아래처럼 윈도우 메시지를 Post 시키면된다.

hParent는 소켓을 쓰는 윈도우이다.
WM_ASYNC는 소켓용 노티파이 메시지이다.

    :
PostMessage(hParent, WM_ASYNC, m_s,
      WSAMAKESELECTREPLY(FD_WRITE, 0));

이려면 FD_WRITE가 떨어진다. OnSend 떨어짐

'KB > MFC/Win32' 카테고리의 다른 글

실제 인증서 디지털서명하기  (0) 2004.03.19
ActiveX odl에서 CLSID 바꾸기..  (0) 2004.03.19
디버그 컨디션  (0) 2004.03.19
URL캐쉬없애기  (0) 2004.03.19
UI 스레드로 날린 PostThreadMesage가 사라질때  (0) 2004.03.19

+ Recent posts