글 작성자: Sowhat_93

WSA(Windows Socket API)에서 소켓작업 실패시

WSAGetLastError로 이를 얻어 올 수 있다.

 

 

이 에러코드는 전역변수가 아니라 TLS(Thread Local Storage) 에 저장된다.

이 함수는 각 스레드가 저마다 에러코드를 저장한다는 것.

그러니 에러가 발생한 컨텍스트를 수행중인 스레드의 에러코드가 다른 스레드에 의해 오염될 일은 걱정하지 않아도 된다.

 

얻어온 에러코드는 MSDN을 통해 정보를 확인한다.

https://docs.microsoft.com/ko-kr/windows/win32/winsock/windows-sockets-error-codes-2

 

Windows 소켓 오류 코드 (Winsock2. h) - Win32 apps

Windows WSAGetLastError 함수에서 반환 된 소켓 (Winsock) 오류 코드입니다.

docs.microsoft.com

MSDN을 보는것이 무조건 좋지만 ... 다음과 같은 함수를 이용해 아주 간략한 정보를 확인할 수 있다.

 

Windows OS는 DLL에 오류코드에 대한 Message를 정의 해 두었다.

이것을 문자열 형태로 읽어오는 함수이다.

아래는 예제코드.

int Error = WSAGetLastError();

	char msgBuf[1024];
	FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,
		NULL, Error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), msgBuf, 1024, NULL);

	std::cout << msgBuf << std::endl;