Windows에서 열 수 있는 Socket 수 얻는 방법

윈속을 쓰려면 무조건 쓰게 되어 있는

 

WSAStartup() 함수… 혹은 MFC에서는 AfxSocketInit()

 

이 함수들의 인자로 넣어주는 WSADATA를 보면

 

typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR * lpVendorInfo;
} WSADATA;

 

이렇게 생겨 먹었는데…
여기서
wVersion, wHighVersion는 버전이고
szDescription는 DLL 의 설명
szSystemStatus는 DLL의 상태 등…

 

그리고 이 글의 주제인
iMaxSockets가 윈도우 환경에서 한 프로세스가 얼마나 많은 소켓을 열 수 있는 가를 나타낸다.

 

iMaxUdpDgUDP의 최대 길이를 나타내고
lpVendorInfo는 벤더 정보를 저장하고 있다…

 

쩝 결론…은…

 

Windows 2000 Pro가 3만개 정도의 소켓을 열 수 있다고 한다…
과연… 사실일까???

라고 생각하고 시간을 한참을 보냈습니다.
처음 이 글을 적은게 2009년 10월 16일이네요.

얼마전 sayheart님께서 댓글을 달아 주셔서… 다시 MSDN을 찾아 보았습니다.

iMaxSockets

Type: unsigned short

The maximum number of sockets that may be opened. This member should be ignored for Windows Sockets version 2 and later.

The iMaxSockets member is retained for compatibility with Windows Sockets specification 1.1, but should not be used when developing new applications. No single value can be appropriate for all underlying service providers. The architecture of Windows Sockets changed in version 2 to support multiple providers, and the WSADATA structure no longer applies to a single vendor’s stack.

Windows Socket 2 이후로는 의미없는 값이네요. 이 글을 처음 적을 때에 Winsock2가 쓰이고 있었을텐데… 왜 저걸 못 봤을까?

암튼 댓글에 있는 링크를 다시 걸어둡니다.

[techshare님의 글 윈도우 서버 환경에서, 최대 생성 가능한 소켓 연결 수는 얼마일까?] (http://blog.naver.com/techshare/100118458092)