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來擷取特定的錯誤碼。
錯誤碼 | 意義 |
---|---|
使用此函式之前,必須先進行成功的 WSAStartup 呼叫。 | |
網路子系統失敗。 | |
封鎖的 Windows Sockets 1.1 呼叫正在進行中,或者服務提供者仍在處理回呼函式。 | |
描述項 s 不是通訊端。 | |
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.1和Windows 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 |