블로그 이미지

WinSocket

lang) MFC 2010/02/07 15:22
I/O 모델 연결시도/
연결성공
메모리 사용량 (KB) Non-Paged Pool CPU 사용량 (%) 쓰레드 개수 처리량 (Send/Receive Byte Per Second)
Blocking
7,000/1,008
12,000/1,008
25,632
25,408
36,121
36,352
10-60
5-40
2,016
2,016
2,198,148/2,198,148
404,227/402,227
Non-blocking
7,000/4,011
12,000/5,779
4,208
5,224
135,123
156,260
95-100
95-100
1
1
0/0
0/0
WSAAsync-Select
7,000/1,956
12,000/4,077
3640
4884
38,246
42,992
75-85
90-100
3
3
1,610,204/1,637,819
652,902/652,902
WSAEvent-Select
7,000/6,999
12,000/11,080
46,000/45,933
10,502
19,214
37,392
36,402
39,040
121,624
64-85
50-60
80-90
113
192
791
4,921,350/5,186,297
3,217,493/3,217,297
3,851,059/3,851,059
Overlapped (events)
7,000/5,558
12,000/12,000
49,000/48,997
21,844
60,576
241,208
34,944
48,060
155,480
64-85
35-45
85-95
66
195
792
5,024,723/4,095,644
1,803,878/1,803,878
3,865,152/3,834,511
Overlapped (completion port)
7,000/7,000
12,000/12,000
50,000/49,997
36,160
59,256
242,272
31,128
38,862
148,192
40-50
40-50
55-65
2
2
2
6,282,473/3,893,507
5,027,914/5,027,095
4,326,946/4,326,496

테스트 서버 : 768 MB 메모리 Pentium 4 1.7GHz Xeon

테스트 클라이언트 : 128 MB 메모리 Pentium 2 233 MHz
                              128 MB 메모리 Pentium 2 350 MHz
                              1 GB 메모리 Itanium 733 MHz

테스트 환경 : Windows XP

추천 클라이언트 모델 : 하나 이상의 소켓을 처리하는 클라이언트를 개발하고자 한다면 overlapped I/O 모델이나 WSAEventSelect 모델을 사용하는 것이 성능상으로 유리할 것이다. 만일 윈도우 기반의 응용프로그램을 개발한다면 윈도우 메시지를 이용하는 WSAAsyncSelect 모델을 권해주고 싶다. 왜냐하면 응용프로그램에서 이미 메시지 처리에 관련된 사항들이 준비되어 있을 것이기 때문이다.
추천 서버 모델 : 동시에 몇 개의 소켓을 처리해야 하는 서버를 개발해야 한다면 overlapped I/O 모델을 선택하는 것이 성능상으로 유리할 것이다. 만일 동시에 대량의 I/O를 처리해야 하는 서버를 개발한다면 I/O completion port 모델을 선택하는 것이 성능상으로 더 좋을 것이다.

출처 : Microsoft 공식 지정 학습서 NETWORK PROGRAMMING FOR MICROSOFT WINDOWS Second Edition 204, 205, 233 page

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2010/02/07 15:22 2010/02/07 15:22
블로그 이미지

sendmail 설정

sys) CentOS 2010/02/01 02:49

sendmail.mc 수정

[ Korean White Domain 설정시]

FEATURE(dnsbl, `blackholes.mail-abuse.org', `Rejected - see http://www.mail-abuse.org/rbl/')dnl
FEATURE(dnsbl, `spamlist.or.kr', `Rejected - see http://www.kisarbl.or.kr/')dnl

[Spam Filtering 해외 블랙 도메인 설정시]

FEATURE(`dnsbl', `relays.ordb.org', `"Rejected due to Open Relay see http://www.ordb.org/lookup/?host=" $&{clientaddr} " for more information"')dnl
FEATURE(`dnsbl', `sbl.spamhaus.org', `"Rejected due to Spamhaus listing see http://www.abuse.net/sbl.phtml?IP=" $&{clientaddr} " for more information"')dnlnl

[To stop accepting E-mail from unresolvable domains ]

FEATURE(`accept_unresolvable_domains')dnl

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/02/01 02:49 2010/02/01 02:49
블로그 이미지

CAnyObject Sample

lang) C++ 2010/01/14 19:06
/*---------------------------------------------------------------------------------------------

 Any 시리즈에 대한 라이센스 명시입니다.
 아래 라이센스에 동의하시는 분만 Any 시리즈를 사용할수 있습니다.

 Any 시리즈의 모든 저작권은 저작자 에게 있습니다.
 Any 시리즈는 저작권 명시시 개인은 누구나 사용할수 있습니다.
 Any 시리즈는 상업적 용도로 사용할수 없습니다. 단 저작자의 이해가 있는 경우는 예외로 합니다.
 Any 시리즈는 사용으로 인한 데이타 손실 및 기타 손해에 대해서 책임을 지지 않습니다.
 Any 시리즈에 대해 유지/보수의 의무가 없습니다.
 Any 시리즈의 소스 재사용 및 수정 할 수 없습니다.
 Any 시리즈의 모든 저작권 표시 및 카피라이터는 수정 및 삭제 할수 없습니다.
 Any 시리즈는 소스는 개인적으로 사용시 수정하여 사용할수 있습니다. 단 수정배포는 안됩니다.

 Homepage   : www.anyons.net
 E-Mail     : anydragon@anyons.net

 Copyright (C) anydragon 2006-2010 All Rights Reserved

-----------------------------------------------------------------------------------------------
 Filename   : AnyObject.h
 Modified   : 2010/1/3
 Author     : anydragon
-----------------------------------------------------------------------------------------------*/

#pragma once

/// \class	CAnyObject
/// \brief	모든 클래스들의 기초가 되는 AnyObject 클래스
class CAnyObject
{
	#pragma region [ Constructors ]

public:
	/// \brief		생성자
	CAnyObject(void);
	/// \brief		생성자
	/// \param		const CAnyObject &r_anyObject
	CAnyObject(const CAnyObject &r_anyObject);
	/// \brief		파괴자
	~CAnyObject(void);

	#pragma endregion [ Constructors ]

public:
	#pragma region [ Members ]

	/// \brief		operator +=
	/// \return		CAnyObject&
	/// \param		const CAnyObject &r_anyObject
	CAnyObject& operator += (const CAnyObject &r_anyObject);
	/// \brief		operator ++
	/// \return		CAnyObject&
	/// \return		CAnyObject&
	CAnyObject& operator ++ ();
	/// \brief		operator ++
	/// \return		const CAnyObject
	/// \param		int
	const CAnyObject operator ++ (int);

	#pragma endregion

public:
	#pragma region [ Hiddens ]

	int m_nImsi;

	#pragma endregion [ Hiddens ]
};
/*---------------------------------------------------------------------------------------------

 Any 시리즈에 대한 라이센스 명시입니다.
 아래 라이센스에 동의하시는 분만 Any 시리즈를 사용할수 있습니다.

 Any 시리즈의 모든 저작권은 저작자 에게 있습니다.
 Any 시리즈는 저작권 명시시 개인은 누구나 사용할수 있습니다.
 Any 시리즈는 상업적 용도로 사용할수 없습니다. 단 저작자의 이해가 있는 경우는 예외로 합니다.
 Any 시리즈는 사용으로 인한 데이타 손실 및 기타 손해에 대해서 책임을 지지 않습니다.
 Any 시리즈에 대해 유지/보수의 의무가 없습니다.
 Any 시리즈의 소스 재사용 및 수정 할 수 없습니다.
 Any 시리즈의 모든 저작권 표시 및 카피라이터는 수정 및 삭제 할수 없습니다.
 Any 시리즈는 소스는 개인적으로 사용시 수정하여 사용할수 있습니다. 단 수정배포는 안됩니다.

 Homepage   : www.anyons.net
 E-Mail     : anydragon@anyons.net

 Copyright (C) anydragon 2006-2010 All Rights Reserved

-----------------------------------------------------------------------------------------------
 Filename   : AnyObject.cpp
 Modified   : 2010/1/3
 Author     : anydragon
-----------------------------------------------------------------------------------------------*/

#include "StdAfx.h"

#include "AnyObject.h"

CAnyObject::CAnyObject(void)
{
}

CAnyObject::CAnyObject(const CAnyObject &r_anyObject)
{
	m_nImsi = r_anyObject.m_nImsi;
}

CAnyObject::~CAnyObject(void)
{
}

CAnyObject& CAnyObject::operator += (const CAnyObject &r_anyObject)
{
	m_nImsi += r_anyObject.m_nImsi;
	return *this;
}

CAnyObject& CAnyObject::operator ++ ()
{
	(*this).m_nImsi ++;
	return *this;
}

const CAnyObject CAnyObject::operator ++ (int)
{
	const CAnyObject anyobject = *this;
	++ (*this).m_nImsi;
	return anyobject;
}
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/01/14 19:06 2010/01/14 19:06