共用方式為


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 來擷取特定的錯誤碼。

錯誤碼 意義
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 Phone Store 應用程式支援此函式。

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
標頭 winsock.h (包含 Winsock2.h)
程式庫 Ws2_32.lib
Dll Ws2_32.dll

另請參閱

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock 函式

Winsock 參考

getsockopt

setsockopt

socket