ioctlsocket 함수(winsock2.h)
ioctlsocket 함수는 소켓의 I/O 모드를 제어합니다.
구문
int WSAAPI ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
매개 변수
[in] s
소켓을 식별하는 설명자입니다.
[in] cmd
소켓에서 수행할 명령 입니다.
[in, out] argp
cmd에 대한 매개 변수에 대한 포인터입니다.
반환 값
성공적으로 완료되면 ioctlsocket 은 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 코드를 검색할 수 있습니다.
오류 코드 | 의미 |
---|---|
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다. | |
네트워크 하위 시스템이 실패했습니다. | |
차단 Windows 소켓 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다. | |
설명자 가 소켓이 아닙니다. | |
argp 매개 변수는 사용자 주소 공간의 유효한 부분이 아닙니다. |
설명
ioctlsocket 함수는 모든 상태의 모든 소켓에서 사용할 수 있습니다. 프로토콜 및 통신 하위 시스템에 관계없이 소켓과 연결된 일부 운영 매개 변수를 설정하거나 검색하는 데 사용됩니다. cmd 매개 변수 및 해당 의미 체계에서 사용할 수 있는 명령은 다음과 같습니다.
WSAIoctl 함수는 소켓, 전송 프로토콜 또는 통신 하위 시스템에 연결된 운영 매개 변수를 설정하거나 검색하는 데 사용됩니다.
WSAIoctl 함수는 ioctlsocket 함수보다 더 강력하며 운영 매개 변수가 설정하거나 검색할 수 있는 많은 값을 지원합니다.
예제 코드
다음 예제에서는 ioctlsocket 함수를 사용하는 방법을 보여 줍니다.
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
void main()
{
//-------------------------
// Initialize Winsock
WSADATA wsaData;
int iResult;
u_long iMode = 0;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//-------------------------
// Create a SOCKET object.
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//-------------------------
// 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.
iResult = ioctlsocket(m_socket, FIONBIO, &iMode);
if (iResult != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", iResult);
}
호환성
이 ioctlsocket 함수는 버클리 소켓에 있는 ioctl 함수와 비교할 때 소켓에서 함수의 하위 집합만 수행합니다. ioctlsocket 함수에는 ioctl의 FIOASYNC에 해당하는 명령 매개 변수가 없으며 SIOCATMARK는 ioctlsocket에서 지원하는 유일한 소켓 수준 명령입니다.Windows Phone 8: 이 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에서 지원됩니다.
Windows 8.1 및 Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상의 Windows 스토어 앱에서 지원됩니다.
요구 사항
지원되는 최소 클라이언트 | Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | winsock2.h(Winsock2.h 포함) |
라이브러리 | Ws2_32.lib |
DLL | Ws2_32.dll |