반응형
WSAGetLastError()에서 오류 문자열을 검색하려면 어떻게 합니까?
리눅스에서 윈도우로 소켓 코드를 이식하고 있습니다.
리눅스에서 나는 사용할 수 있었습니다.strerror()오류 코드를 인간 readable 문자열로 변환합니다.
MSDN 문서에는 반환되는 각 오류 코드에 대해 동일한 문자열이 표시됩니다.WSAGetLastError(), 하지만 그 끈을 어떻게 회수할 수 있는지에 대해서는 아무것도 보이지 않습니다.할 것이다strerror()여기서도 일해요?
Winsock에서 사람이 읽을 수 있는 오류 문자열을 검색하려면 어떻게 해야 합니까?
wchar_t *s = NULL;
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPWSTR)&s, 0, NULL);
fprintf(stderr, "%S\n", s);
LocalFree(s);
의 설명서에 나와 있듯이 오류 메시지의 텍스트 버전을 가져올 때 사용할 수 있습니다.
설정해야 합니다.FORMAT_MESSAGE_FROM_SYSTEM에서dwFlagsparameter and pass the error code를dwMessage매개 변수.
mxcl의 답변은 malloc/free의 필요성과 그 안에 내포된 위험성을 제거하고 메시지 텍스트를 사용할 수 없는 경우를 처리하는 약간 단순한 버전입니다(Microsoft는 그 때 어떤 일이 일어나는지 문서화하지 않기 때문에).
int
err;
char
msgbuf [256]; // for a message up to 255 bytes.
msgbuf [0] = '\0'; // Microsoft doesn't guarantee this on man page.
err = WSAGetLastError ();
FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, // flags
NULL, // lpsource
err, // message id
MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // languageid
msgbuf, // output buffer
sizeof (msgbuf), // size of msgbuf, bytes
NULL); // va_list of arguments
if (! *msgbuf)
sprintf (msgbuf, "%d", err); // provide error # if no string available
언급URL : https://stackoverflow.com/questions/3400922/how-do-i-retrieve-an-error-string-from-wsagetlasterror
반응형
'codememo' 카테고리의 다른 글
| 우커머스 추가 관련 상품 및 상품 목록에 카트 버튼 추가 (0) | 2023.10.15 |
|---|---|
| execvp에 대한 argv 매개 변수가 일정하지 않은 이유는 무엇입니까? (0) | 2023.10.15 |
| 테이블 셀(td)에서 해당 테이블 헤더(th)를 가져오려면 어떻게 해야 합니까? (0) | 2023.10.15 |
| MySQL IN 절: 최대 인수 수 (0) | 2023.10.15 |
| SQLLechemy에서 bulk_update_mapping을 사용하여 서로 다른 값으로 여러 행 업데이트 (0) | 2023.10.15 |