- 변형하지 않은 원본
- Visual Studio 6.0 에서 돌아갈수 있게 약간 손본 판
- 직접 한글화 시켜서 새로 친 판
원본 주소
http://www.sockaddr.com/ExampleSourceCode.html
코드 내용
/*
소스 출처 및 저작권
http://www.sockaddr.com/ExampleSourceCode.html
http://cakel.tistory.com
교육용을 목적으로 자유롭게 배포 가능합니다.
WSVer.c
WSAStartup() 함수에서 받는 정보를 출력합니다.
WSA = Windows Socket Application : 윈도우즈 소켓 응용프로그램
선택적으로 당신은 명령줄에서 해당 버전을 입력할수 있습니다.
예
Version 1.1 정보 WSVer 1 1
Version 2.0 정보 WSVer 2 0
version 을 입력하지 않는다면 기본적으로 1.1 version 을 요청합니다.
*/
#include <stdio.h>
#include <winsock.h>
#include "wsedesc.c"
// wsedesc.c 도구 함수
LPCSTR WSErrorDescription(int iErrorCode);
void PrintWSAData(LPWSADATA pWSAData);
int main(int argc, char* *argv)
{
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
int rc;
if (argc == 3)
wVersionRequested = MAKEWORD( atol(argv[1]), atol(argv[2]) );
rc = WSAStartup(wVersionRequested, &wsaData);
if(!rc)
PrintWSAData(&wsaData);
else
fprintf( stderr, "\nWSAStartup() error (%d) %s\n", rc, WSErrorDescription(rc) );
WSACleanup();
return 0;
}
void PrintWSAData(LPWSADATA pWSAData)
{
printf("\nWSADATA");
printf("\n---------------------");
printf("\nVersion - 버전.............: %d.%d", LOBYTE(pWSAData->wVersion),
HIBYTE(pWSAData->wHighVersion) );
printf("\nHighVersion - 상위버전.....: %d.%d", LOBYTE(pWSAData->wHighVersion),
HIBYTE(pWSAData->wHighVersion) );
printf("\nDescription - 설명.........: %s", pWSAData->szDescription);
printf("\nSystem Status - 시스템상태.: %s", pWSAData->szSystemStatus);
printf("\nMax number of socket - 최대 소켓수 : %d", pWSAData->iMaxSockets);
printf("\nMAX UDP datagram size - UDP 최대 데이터그램 크기: %d\n", pWSAData->iMaxUdpDg);
}
/*
// 저작권
// http://www.sockaddr.com/ExampleSourceCode.html
// http://cakel.tistory.com
// 교육용을 목적으로 자유롭게 배포 가능합니다.
// WSEDesc.c -- 윈속 오류 설명
*/
#include <winsock.h>
typedef struct tagWSAEDESCRIPTION
{
int iErrorCode;
char* szDescription;
}WSAEDESCRIPTION;
WSAEDESCRIPTION ErrorDescriptions[] = {
WSAEINTR,
"WSAEINTR : Interrupted function call, 함수 호출이 인터럽트(강제수행 되었습니다",
WSAEBADF,
"WSAEBADF : Bad file number, 잘못된 파일 번호 입니다.",
WSAEACCES,
"WSAEACCES : Permission denied, 허용되지 않았습니다.",
WSAEFAULT,
"WSAEFAULT : Address fault, 부르지 못했습니다.",
WSAEINVAL,
"WSAINVAL : Invaild argument, 값이 틀렸습니다.",
WSAEMFILE,
"WSAEMFILE : Too many open files, 파일이 너무 많이 열렀습니다.",
WSAEWOULDBLOCK,
"WSAEWOULDBLOCK : Resource temporarily unavailable (Would block), 자원이 없습니다.(아마 막혔을 겁니다.)",
WSAEINPROGRESS,
"WASEINPROGRESS : Operation now in progress, 작업중입니다.",
WSAEALREADY,
"WSAEREADY : Operation already in progress, 이미 수행중입니다.",
WSAENOTSOCK,
"WSANOTSOCK : Socket operation operation on non-socket, 소켓이 아닌 곳에서 소켓 작업중입니다",
WSAEDESTADDRREQ,
"WSAEDESTADDRREQ : Destination address required, 목적지 주소가 필요 합니다.",
WSAEMSGSIZE,
"WSAEMSGSIZE : Message too long, 메시지가 너무 깁니다.",
WSAEPROTOTYPE,
"WSAEPROTOTYPE : Protocol wrong type for socket, 소켓에 맞지 않은 프로토콜 입니다.",
WSAENOPROTOOPT,
"WSAENOPROTOOPT : Bad protocol option, 잘못된 프로토콜 옵션입니다.",
WSAEPROTONOSUPPORT,
"WSAEPROTONOSUPPORT : Protocol not supported, 지원하지 않는 프로토콜입니다.",
WSAESOCKTNOSUPPORT,
"WSAESOCKTNOSUPPORT : Socket type not supported, 지원하지 않는 소켓 형식입니다.",
WSAEOPNOTSUPP,
"WSAEOPNOSUPP : Operation not supported, 지원하지 않는 명령입니다.",
WSAEPFNOSUPPORT,
"WSAEPFNOSUPP : Protocol family not supported, 지원하지 않는 프로토콜 계열입니다.",
WSAEAFNOSUPPORT,
"WSAEAFNOSUPPORT : Address family not supported by protocol family, 프로토콜 계열에서 지원하지 않는 주소입니다.",
WSAEADDRINUSE,
"WAEADDRINUSE : Address already in use, 이미 사용 중인 주소 입니다.",
WSAEADDRNOTAVAIL,
"WSAEADDRNOTAVAIL : Cannot assign requested address, 요구한 주소를 할당할수 없습니다.",
WSAENETDOWN,
"WSAENETDOWN : Network is down, 네트워크가 작동하지 않습니다.",
WSAENETUNREACH,
"WSAENETUNREACH : Network is unreachable, 네트워크로 접근할수 없습니다.",
WSAENETRESET,
"WSAENETRESET : Network dropped connetion on reset, 네트워크가 초기화 되어 꾾어졌습니다.",
WSAECONNABORTED,
"WSAECONNABORTED : Software caused connection abort, 소프트웨어에 의해 연결을 중단되었습니다.",
WSAECONNRESET,
"WSAECONNRESET : Connection reset by peer, 상대방에 의해 연결이 초기화 되었습니다.",
WSAENOBUFS,
"WSAENOBUFS : No buffer space available, 버퍼 공간이 부족합니다",
WSAEISCONN,
"WSAEISCONN : Socket is already connected, 소켓이 이미 연결되었습니다.",
WSAESHUTDOWN,
"WSAESHUTDOWN : Cannot send after socket shutdown, 소켓이 닫힌 후에는 보낼 수가 없습니다.",
WSAETOOMANYREFS,
"WSAETOOMANYREFS : Too many references, 너무 많은 참조를 했습니다.",
WSAETIMEDOUT,
"WSAETIMEDOUT : Connection timed out, 연결 시간 초과 했습니다.",
WSAELOOP,
"WSAELOOP : Loop, 반복",
WSAENAMETOOLONG,
"WSAENAMETOOLONG : Name too long, 이름이 너무 깁니다.",
WSAEHOSTDOWN,
"WSAEHOSTDOWN : Host is down, 호스트가 꺼졌습니다.",
WSAEHOSTUNREACH,
"WSAEHOSTUNREACH : No route to host, 호스트로 접근할수가 없습니다.",
WSAENOTEMPTY,
"WSAENOTEMPTY : Directory not empty, 디렉토리가 안 비었습니다.",
WSAEPROCLIM,
"WSAEPROCLIM : Too many processes, 프로세스가 너무 많습니다.",
WSAEUSERS,
"WSAEUSERS : Too many users, 사용자가 너무 많습니다.",
WSAEDQUOT,
"WSAEDQUOT : Disk quota, 디스크 허용량 초과",
WSAESTALE,
"WSAESTALE : Stale, 오래됨",
WSAEREMOTE,
"WSAEREMOTE : Remote, 원격",
WSASYSNOTREADY,
"WSAESYSNOTREADY : Network subsystem is unavailable",
WSAVERNOTSUPPORTED,
"WSAEVERNOTSUPPROTED : WINSOCK.DLL version out of range, 윈속 버전이 맞지 않습니다.",
WSANOTINITIALISED,
"WSANOTINITIALISED : Successful WSAStartup() not yet performed, 성공적인 WSAStartup() 함수가 아직 수행되지 않았습니다.",
WSAEDISCON,
"WSAEDISCON : Graceful shutdown in progress, 우아한(?) 종료가 진행 중입니다.",
WSAHOST_NOT_FOUND,
"WSAHOST_NOT_FOUND : Host not found, 호스트를 발견하지 못했습니다.",
WSATRY_AGAIN,
"WSATRY_AGAIN : Non-authoritative host not found, 비인증 호스트를 발견하지 못했습니다.",
WSANO_RECOVERY,
"WSANO_RECOVERY : Non-recoverable error, 회복할수 없는 오류",
WSANO_DATA,
"WSANO_DATA : Vaild name, no data record of requested type, 유효한 이름이였으나 원하는 자료형을 받지 못했습니다.",
#ifdef _WINSOCK2API_ // 윈속 2.0 이상에서 지원하는거 같습니다.
WSAENOMORE,
"WSAENOMORE : ",
WSAECANCELLED,
"WSAECANCELLED : Cancelled, 취소됨",
WSAEINVAILDPROCTABLE,
"WSAEINVAILDPROCTABLE : Invaild procedure table form service provider, 잘못된 프로지져 테이블 폼 서비스 제공자 입니다."
WSAEPROVIDERFAILEDINIT,
"WSAEPROVIDERFAILEDINIT : Unable to initialize a service provider, 서비스 제공자를 시작할수 없습니다.",
WSASYSCALLFAILURE,
"WSASYSCALLFAILURE, : System call Failure, 시스템 호출 실패",
WSASERVICE_NOT_FOUND,
"WSASERVICE_NOT_FOUND : Service not found, 서비스를 찾을수 없습니다.",
WSATYPE_NOT_FOUND,
"WSATYPE_NOT_FOUND : Type not found", 형식을 찾을수 없습니다.",
WSA_E_NO_MORE,
"WSA_E_NO_MORE : ",
WSA_E_CANCELLED,
"WSA_E_CANCELLED : ",
WSAEREFUSED,
"WSAREFUSED : Refused, 거부됨",
#endif
};
//
// WSErrorDesciption()
//
LPCSTR WSErrorDescription(int iErrorCode)
{
#define NUMELEMENTS sizeof(ErrorDescriptions) / sizeof(ErrorDescriptions[0])
int iNdx;
for(iNdx = 0; iNdx < NUMELEMENTS; iNdx++)
{
if (ErrorDescriptions[iNdx].iErrorCode == iErrorCode)
return(ErrorDescriptions[iNdx].szDescription);
}
return("Unknown error");
}
원판과 변경점
1. 오류코드 및 부분 한글화
2. include 부분 변경
주의점
ws2_32.lib 를 프로젝트 메뉴에서 포함 시키시고 두 C 파일 모두 프로젝트 내에 있어야지 컴파일이 됩니다.
프로젝트에 Link 탭에서 ws2_32.lib 를 꼭 확인해서 넣습니다.(이후 생략)
프로젝트 내에 있지 않으면 컴파일시 오류가 납니다.
출력화면