ioctlsocket 함수(winsock.h)

ioctlsocket 함수는 소켓의 I/O 모드를 제어합니다.

구문

int ioctlsocket(
  [in]      SOCKET s,
  [in]      long   cmd,
  [in, out] u_long *argp
);

매개 변수

[in] s

소켓을 식별하는 설명자입니다.

[in] cmd

소켓에서 수행할 명령 입니다. Winsock IOCTL을 참조하세요.

[in, out] argp

cmd에 대한 매개 변수에 대한 포인터입니다.

반환 값

성공적으로 완료되면 ioctlsocket 은 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 코드를 검색할 수 있습니다.

오류 코드 의미
WSANOTINITIALISED
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEINPROGRESS
차단 Windows Sockets 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAENOTSOCK
설명자 소켓이 아닙니다.
WSAEFAULT
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.1Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winsock.h(Winsock2.h 포함)
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock 함수

Winsock 참조

getsockopt

setsockopt

socket