본문 바로가기

프로그래밍/Server

IO 모델

 

윈속에는 블록킹(blocking) 와 넌블록킹(non-blocking)으로 두가지 소켓 모드가 있다.

윈속에서 제공하는 I/O모델로는 blocking, select, WSAAsyncSelect, WSAEventSelect, overlapped I/O, completion port가 있다.

 

블록킹 모드에서는 I/O 작업이 끝날 때 까지 윈속 함수의 리턴이 대기 된다.

넌블로킹 모드에서는 윈속 함수는 즉시 리턴 된다.

 

블록킹 모드로 코딩 할 경우에는 보통 스레드를 사용 한다.

수신스레드와 데이터처리 스레드로 두개의 스레드를 사용 한다.

두개의 스레드 사이에 동기화객체를 사용하여 데이터를 접근 한다.

 

데이터 수신 쓰레드

void ReadThread(void)

{

while ( !done )

{

nTotal = 0;

nLeft = NUM_BYTES_REQUIRED;

while ( nTotal != NUM_BYTES_REQUIRED )

{

EnterCriticalSection( &data );

nRead = recv( ... );

if ( nRead == -1 )

{

error

}

 

nTotal += nRead;

nLeft -= nRead;

nBytes += nRead;

LeaveCriticalSection( &data );

}

SetEvent( hEvent );

}

}

 

데이터 처리 쓰레드

void ProcessThread(void)

{

WaitForsingleObject( &data );

EnterCriticalSection( &data );

 

// 데이터로 뭔가를 한다..

DoSomeComputationOnData( buff );

// 처리된 만큼 버퍼에서 제거 한다.

nBytes -= NUM_BYTES_REQUIRED;

 

LeaveCriticalSection( &data );

}

 

 

 

 

넌블로킹 소켓은 생성한 소켓에 대하여 ioctlsocket를 호출하여 만들 수 있다.

 

 

 

 

 

'프로그래밍 > Server' 카테고리의 다른 글

SQL 2000 syntax error  (0) 2013.02.12
DB 복사 에러  (0) 2013.01.23
input director 설정 ( PC, 노트북 )  (0) 2012.06.17
MTU ( Maximun Transmission Unit )  (0) 2012.06.15
RUDP  (1) 2012.02.13