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 會傳回零。 否則,會傳回SOCKET_ERROR的值,而且可以呼叫 WSAGetLastError來擷取特定的錯誤碼。

錯誤碼 意義
WSANOTINITIALISED
使用此函式之前,必須先進行成功的 WSAStartup 呼叫。
WSAENETDOWN
網路子系統失敗。
WSAEINPROGRESS
封鎖的 Windows Sockets 1.1 呼叫正在進行中,或者服務提供者仍在處理回呼函式。
WSAENOTSOCK
描述項 s 不是通訊端。
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 函式只會在通訊端上執行函式子集,相較于在 Book 通訊端中找到的 ioctl 函式。 ioctlsocket函式沒有相當於ioctl FIOASYNC 的命令參數,而 SIOCATMARK 是唯一ioctlsocket支援的通訊端層級命令。

Windows Phone 8:Windows Phone 8 和更新版本Windows Phone市集應用程式支援此函式。

Windows 8.1Windows Server 2012 R2:Windows 市集應用程式支援此功能,Windows 8.1、Windows Server 2012 R2 及更新版本。

規格需求

   
最低支援的用戶端 Windows 8.1、Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 winsock2.h (包括 Winsock2.h)
程式庫 Ws2_32.lib
Dll Ws2_32.dll

另請參閱

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock 函式

Winsock 參考

getsockopt

setsockopt

socket