共用方式為


SIO_APPLY_TRANSPORT_SETTING控制項程式碼

描述

SIO_APPLY_TRANSPORT_SETTING控制項程式碼會將一或多個傳輸設定套用至通訊端。

若要執行這項作業,請使用下列參數呼叫 WSAIoctlWSPIoctl 函式。

int WSAIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_APPLY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,             // pointer to the output buffer
  (DWORD) cbOutBuffer,   // size, in bytes, of the output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
);
int WSPIoctl(
  (socket) s,             // descriptor identifying a socket
  SIO_APPLY_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,             // pointer to the output buffer
  (DWORD) cbOutBuffer,   // size, in bytes, of the output buffer
  (LPDWORD) lpcbBytesReturned,    // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,   // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,   // a WSATHREADID structure
  (LPINT) lpErrno   // a pointer to the error code.
);

參數

s

識別通訊端的描述項。

dwIoControlCode

作業的控制程式代碼。 針對此作業使用 SIO_APPLY_TRANSPORT_SETTING

lpvInBuffer

輸入緩衝區的指標。 此參數包含結構的指標,其中結構的第一個成員是 TRANSPORT_SETTING_ID 結構,可決定要套用的傳輸設定。

cbInBuffer

輸入緩衝區的大小,以位元組為單位。 此參數取決於所套用的傳輸設定。

lpvOutBuffer

輸出緩衝區的指標。 此參數取決於所套用的傳輸設定。

cbOutBuffer

輸出緩衝區的大小,以位元組為單位。

lBytesReturned

變數的指標,可接收儲存在輸出緩衝區中的資料大小,以位元組為單位。

如果輸出緩衝區太小,則呼叫會失敗, WSAGetLastError 會傳回 WSAEINVAL而lBytesReturned 參數會指向零的 DWORD 值。

如果lpOverlappedNull,則成功呼叫時所傳回之 lmicrosoftBytesReturned參數所指向的DWORD值不能為零。

如果重迭通訊端的 lpOverlapped 參數不是 Null ,則會起始無法立即完成的作業,而且稍後會指出完成。 傳回之lHTTPBytesReturned參數所指向的DWORD值可能是零,因為儲存的資料大小在重迭作業完成之前無法判斷。 當作業完成時發出適當的完成方法訊號時,可以擷取最終完成狀態。

lpvOverlapped

WSAOVERLAPPED結構的指標。

如果沒有重迭屬性建立通訊端則會忽略 lpOverlapped參數。

如果使用重迭屬性開啟 s ,且 lpOverlapped 參數不是 Null,則會以重迭的 (非同步) 作業來執行作業。 在此情況下, lpOverlapped 參數必須指向有效的 WSAOVERLAPPED 結構。

對於重迭的作業, WSAIoctlWSPIoctl 函式會立即傳回,並在作業完成時發出適當的完成方法訊號。 否則,在作業完成或發生錯誤之前,函式不會傳回 。

lpCompletionRoutine

類型:_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

當作業完成時呼叫的完成常式指標, (忽略非重迭通訊端) 。

lpThreadId

WSATHREADID結構的指標,供提供者在後續呼叫WPUQueueApc時使用。 提供者應該儲存參考的 WSATHREADID 結構, (在 WPUQueueApc 函式傳回之前,不要儲存相同) 的指標。

注意 此參數僅適用于 WSPIoctl 函式。

lpErrno

錯誤碼的指標。

注意 此參數僅適用于 WSPIoctl 函式。

傳回值

如果作業順利完成, WSAIoctlWSPIoctl 函式會傳回零。

如果作業失敗或擱置中,WSAIoctl 或 WSPIoctl函式會傳回SOCKET_ERROR 若要取得擴充錯誤資訊,請呼叫 WSAGetLastError

錯誤碼 意義
WSA_IO_PENDING 重迭的 I/O 作業正在進行中。 如果成功起始重迭的作業,且稍後會指出完成,則會傳回此值。
WSA_OPERATION_ABORTED 由於執行緒結束或應用程式的要求,因此已經中止 I/O 作業。 如果因為通訊端關閉或 執行 SIO_FLUSH IOCTL 命令而取消重迭的作業,就會傳回此錯誤。
WSAEFAULT 系統在嘗試在呼叫中使用指標引數時偵測到不正確指標位址。 這個錯誤會傳回lpvInBuffer、lpvoutBufferlBytesReturnedlpOverlappedlpCompletionRoutine參數,完全不包含在使用者位址空間的有效部分。
WSAEINPROGRESS 正在執行封鎖作業。 如果在進行回呼時叫用函式,就會傳回此錯誤。
WSAEINTR 封鎖作業因呼叫 WSACancelBlockingCall而中斷。 如果封鎖作業中斷,就會傳回此錯誤。
WSAEINVAL 提供的引數無效。 如果 dwIoControlCode 參數不是有效的命令,或無法接受指定的輸入參數,或命令不適用於指定的通訊端類型,就會傳回此錯誤。
WSAENETDOWN 通訊端作業遇到停止的網路。 如果網路子系統失敗,就會傳回此錯誤。
WSAENOTSOCK 嘗試在不是通訊端的某個專案上執行作業。 如果描述元 s 不是通訊端,就會傳回此錯誤。
WSAEOPNOTSUPP 參考的物件類型不支援嘗試的作業。 如果不支援指定的 IOCTL 命令,就會傳回此錯誤。 如果傳輸提供者不支援 SIO_APPLY_TRANSPORT_SETTING IOCTL,也會傳回此錯誤。 在 UDP 或 TCP 以外的通訊端上嘗試使用 SIO_APPLY_TRANSPORT_SETTING IOCTL 時,也會傳回此錯誤。

備註

Windows 8和Windows Server 2012和更新版本的作業系統都支援SIO_APPLY_TRANSPORT_SETTING IOCTL。

SIO_APPLY_TRANSPORT_SETTING IOCTL 是用來將傳輸設定套用至通訊端的一般 IOCTL。 套用的傳輸設定是以lpvInBuffer參數中傳遞的TRANSPORT_SETTING_ID為基礎。

從 Windows 8 和 Windows Server 2012 開始,系統會定義 TCP 通訊端上的REAL_TIME_NOTIFICATION_CAPABILITY功能。 從Windows 10和Windows Server 2016開始,也會定義ASSOCIATE_NAMERES_CONTEXT。 如需詳細資訊,請參閱 addrinfoex4ASSOCIATE_NAMERES_CONTEXT_INPUT

如果 lpvInBuffer 參數中傳遞 的TRANSPORT_SETTING_ID 已將 Guid 成員設定為 REAL_TIME_NOTIFICATION_CAPABILITY,則這是要求套用與 ControlChannelTrigger 搭配 ControlChannelTrigger 的 TCP 通訊端即時通知設定,以在 Windows 市集應用程式中接收背景網路通知。 lpvInBuffer參數應該指向REAL_TIME_NOTIFICATION_SETTING_INPUT結構。 此作業未使用 lpvOutBuffer 參數。 此傳輸設定僅適用于 TCP 通訊端。 此傳輸設定提供一種方式,讓 WinInet 或類似的網路服務將指定的 TCP 通訊端標示為已啟用 ControlChannelTrigger 。 當呼叫此選項時,Windows 會標示對應的 TCP 通訊端,並設定適當的硬體和軟體設定。 Windows 市集應用程式不會直接呼叫此 IOCTL。

另請參閱

ControlChannelTrigger

socket

SIO_QUERY_TRANSPORT_SETTING

TRANSPORT_SETTING_ID

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW