Bagikan melalui


Kode Kontrol SIO_APPLY_TRANSPORT_SETTING

Deskripsi

Kode kontrol SIO_APPLY_TRANSPORT_SETTING menerapkan satu atau beberapa pengaturan transportasi ke soket.

Untuk melakukan operasi ini, panggil fungsi WSAIoctl atau WSPIoctl dengan parameter berikut.

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.
);

Parameter

s

Deskriptor yang mengidentifikasi soket.

dwIoControlCode

Kode kontrol untuk operasi. Gunakan SIO_APPLY_TRANSPORT_SETTING untuk operasi ini.

lpvInBuffer

Penunjuk ke buffer input. Parameter ini berisi penunjuk ke struktur di mana anggota pertama struktur adalah struktur TRANSPORT_SETTING_ID yang menentukan pengaturan transportasi apa yang sedang diterapkan.

cbInBuffer

Ukuran, dalam byte, dari buffer input. Parameter ini tergantung pada pengaturan transportasi yang diterapkan.

lpvOutBuffer

Penunjuk ke buffer output. Parameter ini tergantung pada pengaturan transportasi yang diterapkan.

cbOutBuffer

Ukuran, dalam byte, dari buffer output.

lpcbBytesReturned

Penunjuk ke variabel yang menerima ukuran, dalam byte, dari data yang disimpan dalam buffer output.

Jika buffer output terlalu kecil, panggilan gagal, WSAGetLastError mengembalikan WSAEINVAL, dan parameter lpcbBytesReturned menunjuk ke nilai DWORD nol.

Jika lpOverlapped adalah NULL, nilai DWORD yang ditunjukkan oleh parameter lpcbBytesReturned yang dikembalikan pada panggilan yang berhasil tidak boleh nol.

Jika parameter lpOverlapped bukan NULL untuk soket yang tumpang tindih, operasi yang tidak dapat segera diselesaikan akan dimulai, dan penyelesaian akan ditunjukkan di lain waktu. Nilai DWORD yang ditunjukkan oleh parameter lpcbBytesReturned yang dikembalikan mungkin nol karena ukuran data yang disimpan tidak dapat ditentukan sampai operasi yang tumpang tindih selesai. Status penyelesaian akhir dapat diambil ketika metode penyelesaian yang sesuai disinyalkan ketika operasi telah selesai.

lpvOverlapped

Penunjuk ke struktur WSAOVERLAPPED .

Jika soket dibuat tanpa atribut yang tumpang tindih, parameter lpOverlapped diabaikan.

Jika s dibuka dengan atribut yang tumpang tindih dan parameter lpOverlapped bukan NULL, operasi dilakukan sebagai operasi yang tumpang tindih (asinkron). Dalam hal ini, parameter lpOverlapped harus menunjuk ke struktur WSAOVERLAPPED yang valid.

Untuk operasi yang tumpang tindih, fungsi WSAIoctl atau WSPIoctl segera kembali, dan metode penyelesaian yang sesuai disinyalkan ketika operasi telah selesai. Jika tidak, fungsi tidak kembali sampai operasi selesai atau terjadi kesalahan.

lpCompletionRoutine

Jenis: LPWSAOVERLAPPED_COMPLETION_ROUTINE _In_opt_

Penunjuk ke rutinitas penyelesaian yang dipanggil ketika operasi telah selesai (diabaikan untuk soket yang tidak tumpang tindih).

lpThreadId

Penunjuk ke struktur WSATHREADID yang akan digunakan oleh penyedia dalam panggilan berikutnya ke WPUQueueApc. Penyedia harus menyimpan struktur WSATHREADID yang direferensikan (bukan penunjuk ke yang sama) sampai setelah fungsi WPUQueueApc kembali.

Catatan Parameter ini hanya berlaku untuk fungsi WSPIoctl .

lpErrno

Penunjuk ke kode kesalahan.

Catatan Parameter ini hanya berlaku untuk fungsi WSPIoctl .

Nilai kembali

Jika operasi berhasil diselesaikan, fungsi WSAIoctl atau WSPIoctl mengembalikan nol.

Jika operasi gagal atau tertunda, fungsi WSAIoctl atau WSPIoctl mengembalikan SOCKET_ERROR. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi WSAGetLastError.

Kode kesalahan Makna
WSA_IO_PENDING Operasi I/O yang tumpang tindih sedang berlangsung. Nilai ini dikembalikan jika operasi yang tumpang tindih berhasil dimulai dan penyelesaian akan ditunjukkan di lain waktu.
WSA_OPERATION_ABORTED Operasi I/O telah dibatalkan karena keluarnya utas atau permintaan aplikasi. Kesalahan ini dikembalikan jika operasi yang tumpang tindih dibatalkan karena penutupan soket atau eksekusi perintah SIO_FLUSH IOCTL.
WSAEFAULT Sistem mendeteksi alamat penunjuk yang tidak valid dalam mencoba menggunakan argumen pointer dalam panggilan. Kesalahan ini dikembalikan dari parameter lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped atau lpCompletionRoutine tidak sepenuhnya terkandung dalam bagian ruang alamat pengguna yang valid.
WSAEINPROGRESS Operasi pemblokiran saat ini sedang dijalankan. Kesalahan ini dikembalikan jika fungsi dipanggil saat panggilan balik sedang berlangsung.
WSAEINTR Operasi pemblokiran terganggu oleh panggilan ke WSACancelBlockingCall. Kesalahan ini dikembalikan jika operasi pemblokiran terganggu.
WSAEINVAL Argumen yang tidak valid disediakan. Kesalahan ini dikembalikan jika parameter dwIoControlCode bukan perintah yang valid, atau parameter input yang ditentukan tidak dapat diterima, atau perintah tidak berlaku untuk jenis soket yang ditentukan.
WSAENETDOWN Operasi soket menemukan jaringan mati. Kesalahan ini dikembalikan jika subsistem jaringan gagal.
WSAENOTSOCK Operasi dicoba pada sesuatu yang bukan soket. Kesalahan ini dikembalikan jika deskriptor s bukan soket.
WSAEOPNOTSUPP Operasi yang dicoba tidak didukung untuk jenis objek yang direferensikan. Kesalahan ini dikembalikan jika perintah IOCTL yang ditentukan tidak didukung. Kesalahan ini juga dikembalikan jika SIO_APPLY_TRANSPORT_SETTING IOCTL tidak didukung oleh penyedia transportasi. Kesalahan ini juga dikembalikan ketika upaya untuk menggunakan SIO_APPLY_TRANSPORT_SETTING IOCTL dibuat pada soket selain UDP atau TCP.

Keterangan

IOCTL SIO_APPLY_TRANSPORT_SETTING didukung pada Windows 8, dan Windows Server 2012, dan versi sistem operasi yang lebih baru.

IOCTL SIO_APPLY_TRANSPORT_SETTING adalah IOCTL generik yang digunakan untuk menerapkan pengaturan transportasi ke soket. Pengaturan transportasi yang diterapkan didasarkan pada TRANSPORT_SETTING_ID yang diteruskan dalam parameter lpvInBuffer .

Dimulai dengan Windows 8 dan Windows Server 2012, sistem menentukan kemampuan REAL_TIME_NOTIFICATION_CAPABILITY pada soket TCP. Dimulai dengan Windows 10 dan Windows Server 2016, ASSOCIATE_NAMERES_CONTEXT juga ditentukan. Untuk informasi selengkapnya, lihat addrinfoex4 dan ASSOCIATE_NAMERES_CONTEXT_INPUT.

Jika TRANSPORT_SETTING_ID yang diteruskan dalam parameter lpvInBuffer memiliki anggota Guid yang diatur ke REAL_TIME_NOTIFICATION_CAPABILITY, maka ini adalah permintaan untuk menerapkan pengaturan pemberitahuan real time untuk soket TCP yang digunakan dengan ControlChannelTrigger untuk menerima pemberitahuan jaringan latar belakang di aplikasi Windows Store. Parameter lpvInBuffer harus menunjuk ke struktur REAL_TIME_NOTIFICATION_SETTING_INPUT . Parameter lpvOutBuffer tidak digunakan untuk operasi ini. Pengaturan transportasi ini hanya berlaku untuk soket TCP. Pengaturan transportasi ini menyediakan cara bagi WinInet atau layanan jaringan serupa untuk menandai soket TCP tertentu sebagai ControlChannelTrigger diaktifkan. Windows akan menandai soket TCP yang sesuai dan mengonfigurasi pengaturan perangkat keras dan perangkat lunak yang sesuai ketika opsi ini dipanggil. Aplikasi Windows Store tidak akan memanggil IOCTL ini secara langsung.

Lihat juga

ControlChannelTrigger

soket

SIO_QUERY_TRANSPORT_SETTING

TRANSPORT_SETTING_ID

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW