ioctlsocket 函式 (winsock.h)
ioctlsocket 函式會控制套接字的 I/O 模式。
語法
int ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
參數
[in] s
識別套接字的描述項。
[in] cmd
在套接字 上執行的命令。 請參閱 Winsock IOCTLs。
[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 Phone Store 應用程式支援此函式。
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 |
標頭 | winsock.h (包含 Winsock2.h) |
程式庫 | Ws2_32.lib |
Dll | Ws2_32.dll |