해결: 차단 모드(blocking) WSARecv 실패, error 는 WSA_IO_PENDING(997)、WSAEOPNOTSUPP (10045)
1340 단어 error
iMode를 0으로 설정하고 차단 모드로 설정합니다.iMode는 0이 아닌 모드입니다.
//-------------------------
// Set the socket I/O mode: In this case FIONBIO
// enables or disables the blocking mode for the
// socket based on the numerical value of iMode.
// If iMode = 0, blocking is enabled;
// If iMode != 0, non-blocking mode is enabled.
u_long iMode = 0;
ioctlsocket(m_socket, FIONBIO, &iMode);
1, 비차단 모드에서는 CreateEvent가 필요하며 차단 모드일 경우 Create를 사용하지 않고 마지막 두 번째 매개 변수인 lpOverlapped를 NULL로 설정해야 합니다. 그렇지 않으면 WSA_IO_PENDING(997) 오류.
2, 차단 모드든 비차단 모드든 Flags를 0으로 설정해야 합니다. 그렇지 않으면 WSAEOPNOTSUPP(10045) 오류가 발생합니다.Flags는 in_이기 때문에.out 유형입니다. 따라서 WSARecv 앞에 항상 0으로 설정해야 합니다.
WSAOVERLAPPED RecvOverlapped = {0};
RecvOverlapped.hEvent = WSACreateEvent();
if (RecvOverlapped.hEvent == NULL)
{
fprintf(stderr, "WSACreateEvent failed: %d
", WSAGetLastError());
closesocket(ConnSocket);
return;
}
WSABUF DataBuf;
DWORD RecvBytes, Flags = 0;
char buffer[4096];
DataBuf.len = 4096;
DataBuf.buf = buffer;
int rc = WSARecv(ConnSocket, &DataBuf, 1, &RecvBytes, &Flags, &RecvOverlapped, NULL);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qiita의 API를 부를 때 끝에 슬래시를 붙이면 http://~로 리디렉션되므로 조심합시다.제목대로. curl 결과는 . 예전에 보았던 오류에 근거한 박자를 만났습니다 이것은 메시지처럼 HTTP 통신을 시도할 때 iOS가 차단하는 사람입니다. URLSession 에 건네주고 있는 url는 확실히 https...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.