Bagikan melalui


Fungsi panggilan balik LPWSPIOCTL (ws2spi.h)

Fungsi LPWSPIoctl mengontrol mode soket.

Sintaks

LPWSPIOCTL Lpwspioctl;

int Lpwspioctl(
  [in]  SOCKET s,
  [in]  DWORD dwIoControlCode,
  [in]  LPVOID lpvInBuffer,
  [in]  DWORD cbInBuffer,
  [out] LPVOID lpvOutBuffer,
  [in]  DWORD cbOutBuffer,
  [out] LPDWORD lpcbBytesReturned,
  [in]  LPWSAOVERLAPPED lpOverlapped,
  [in]  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
  [in]  LPWSATHREADID lpThreadId,
  [in]  LPINT lpErrno
)
{...}

Parameter

[in] s

Deskriptor yang mengidentifikasi soket.

[in] dwIoControlCode

Kode kontrol operasi yang akan dilakukan.

[in] lpvInBuffer

Penunjuk ke buffer input.

[in] cbInBuffer

Ukuran, dalam byte, dari buffer input.

[out] lpvOutBuffer

Penunjuk ke buffer output.

[in] cbOutBuffer

Ukuran, dalam byte, dari buffer output.

[out] lpcbBytesReturned

Penunjuk ke jumlah byte output aktual.

[in] lpOverlapped

Penunjuk ke struktur WSAOverlapped (diabaikan untuk soket yang tidak tumpang tindih).

[in] lpCompletionRoutine

Jenis: LPWSAOVERLAPPED_COMPLETION_ROUTINE _In_opt_

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

[in] lpThreadId

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

[in] lpErrno

Penunjuk ke kode kesalahan.

Nilai kembali

Jika tidak ada kesalahan yang terjadi dan operasi telah selesai segera, LPWSPIoctl mengembalikan nol. Perhatikan bahwa dalam hal ini rutinitas penyelesaian, jika ditentukan, akan telah diantrekan. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan kode kesalahan tertentu tersedia di lpErrno. Kode kesalahan WSA_IO_PENDING menunjukkan bahwa operasi yang tumpang tindih telah berhasil dimulai dan penyelesaian tersebut akan ditunjukkan di lain waktu. Kode kesalahan lainnya menunjukkan bahwa tidak ada operasi yang tumpang tindih yang dimulai dan tidak ada indikasi penyelesaian yang akan terjadi.

Kode kesalahan Makna
WSA_IO_PENDING
Operasi yang tumpang tindih berhasil dimulai dan penyelesaian akan ditunjukkan di lain waktu.
WSAEFAULT
Parameter lpvInBuffer, lpvOutBuffer atau lpcbBytesReturned tidak sepenuhnya terkandung dalam bagian ruang alamat pengguna yang valid, atau parameter cbInBuffer atau cbOutBuffer terlalu kecil.
WSAEINVAL
dwIoControlCode bukan perintah yang valid, atau parameter input yang disediakan tidak dapat diterima, atau perintah tidak berlaku untuk jenis soket yang disediakan.
WSAEINPROGRESS
Fungsi ini dipanggil ketika panggilan balik sedang berlangsung.
WSAENETDOWN
Subsistem jaringan gagal.
WSAENOTSOCK
Deskriptor bukan soket.
WSAEOPNOTSUPP
Perintah IOCTL yang ditentukan tidak dapat direalisasikan. Misalnya, spesifikasi alur yang ditentukan dalam SIO_SET_QOS tidak dapat dipenuhi.
WSAEWOULDBLOCK
Soket ditandai sebagai nonblocking dan operasi yang diminta akan memblokir.

Keterangan

Rutinitas ini digunakan untuk mengatur atau mengambil parameter operasi yang terkait dengan soket, protokol transportasi, atau subsistem komunikasi. Jika lpOverlapped dan lpCompletionRoutine adalah NULL, soket dalam fungsi ini akan diperlakukan sebagai soket yang tidak tumpang tindih.

Untuk soket yang tidak tumpang tindih, parameter lpOverlapped dan lpCompletionRoutine diabaikan dan fungsi ini dapat memblokir jika soket dalam mode pemblokiran. Perhatikan bahwa jika soket dalam mode nonblocking, fungsi ini dapat mengembalikan WSAEWOULDBLOCK jika operasi yang ditentukan tidak dapat segera diselesaikan. Dalam hal ini, klien Windows Sockets SPI dapat mengubah soket ke mode pemblokiran dan menerbitkan ulang permintaan atau menunggu peristiwa jaringan yang sesuai (seperti FD_ROUTING_INTERFACE_CHANGE atau FD_ADDRESS_LIST_CHANGE jika terjadi SIO_ROUTING_INTERFACE_CHANGE atau SIO_ADDRESS_LIST_CHANGE) menggunakan pesan Windows (melalui LPWSPAsyncSelect atau peristiwa (menggunakan mekanisme pemberitahuan berbasis LPWSPEventSelect).

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 dapat diabaikan. Status penyelesaian akhir dan byte yang dikembalikan dapat diambil ketika metode penyelesaian yang sesuai disinyalkan ketika operasi telah selesai.

Setiap IOCTL dapat memblokir tanpa batas waktu, tergantung pada implementasi penyedia layanan. Jika klien Windows Sockets SPI tidak dapat mentolerir pemblokiran dalam panggilan LPWSPIoctl , I/O yang tumpang tindih akan disarankan untuk IOCTL yang kemungkinan besar akan diblokir termasuk:

  • SIO_ADDRESS_LIST_CHANGE
  • SIO_FINDROUTE
  • SIO_FLUSH
  • SIO_GET_QOS
  • SIO_GET_GROUP_QOS
  • SIO_ROUTING_INTERFACE_CHANGE
  • SIO_SET_QOS
  • SIO_SET_GROUP_QOS

Beberapa IOCTL khusus protokol mungkin juga sangat mungkin diblokir. Periksa lampiran khusus protokol yang relevan untuk informasi yang tersedia.

Prototipe untuk rutinitas penyelesaian yang ditunjukkan oleh parameter lpCompletionRoutine adalah sebagai berikut.

void CALLBACK 
CompletionRoutine(  
  IN DWORD           dwError, 
  IN DWORD           cbTransferred, 
  IN LPWSAOVERLAPPED lpOverlapped, 
  IN DWORD           dwFlags 
);

CompletionRoutine adalah tempat penampung untuk nama fungsi yang disediakan aplikasi. Parameter dwError menentukan status penyelesaian untuk operasi yang tumpang tindih seperti yang ditunjukkan oleh parameter lpOverlapped . Parameter cbTransferred menentukan jumlah byte yang diterima. Parameter dwFlags tidak digunakan untuk IOCTL ini. Rutinitas penyelesaian tidak mengembalikan nilai.

Sebanyak parameter dwIoControlCode sekarang adalah entitas 32-bit, dimungkinkan untuk mengadopsi skema pengodean yang menyediakan cara mudah untuk mempartisi ruang pengidentifikasi opcode. Parameter dwIoControlCode dibangun untuk memungkinkan protokol dan kemandirian vendor saat menambahkan kode kontrol baru, sambil mempertahankan kompatibilitas mundur dengan kode kontrol Windows Sockets 1.1 dan UNIX. Parameter dwIoControlCode memiliki formulir berikut.

bit 31 bit 30 bit 29 bit 28 dan 27 bit 26 melalui 16 bit 15 melalui 0
I O V T Vendor/Keluarga alamat Kode

Saya diatur jika buffer input valid untuk kode, seperti halnya IOC_IN.

O diatur jika buffer output valid untuk kode, seperti halnya IOC_OUT. Perhatikan bahwa untuk kode dengan parameter input dan output, baik I dan O akan diatur.

V diatur jika tidak ada parameter untuk kode, seperti halnya IOC_VOID.

T adalah kuantitas dua-bit yang mendefinisikan jenis IOCTL. Nilai berikut didefinisikan.

  • 0 menunjukkan bahwa IOCTL adalah kode IOCTL UNIX standar, seperti halnya FIONREAD, FIONBIO, dan sebagainya.
  • 1 menunjukkan bahwa IOCTL adalah kode IOCTL Windows Sockets 2 generik. Kode IOCTL baru yang ditentukan untuk Windows Sockets 2 akan memiliki T == 1.
  • 2 menunjukkan bahwa IOCTL hanya berlaku untuk keluarga alamat tertentu.
  • 3 IOCTL hanya berlaku untuk penyedia vendor tertentu. Jenis ini memungkinkan perusahaan diberi nomor vendor yang muncul di anggota keluarga Vendor/Alamat . Kemudian, vendor dapat menentukan IOCTL baru khusus untuk vendor tersebut tanpa harus mendaftarkan IOCTL dengan clearinghouse, sehingga memberikan fleksibilitas dan privasi vendor.

Vendor/Keluarga alamat adalah kuantitas 11-bit yang mendefinisikan vendor yang memiliki kode (jika T == 3), atau yang berisi keluarga alamat tempat kode berlaku (jika T == 2). Jika ini adalah kode IOCTL UNIX (T == 0) maka anggota ini memiliki nilai yang sama dengan kode pada UNIX. Jika ini adalah Windows Sockets 2 IOCTL (T == 1) generik, maka anggota ini dapat digunakan sebagai ekstensi anggota kode untuk memberikan nilai kode tambahan.

Kode adalah kode IOCTL khusus untuk operasi.

Perintah UNIX berikut didukung:

FIONBIO

Mengaktifkan atau menonaktifkan mode nonblokir pada soket. Parameter lpvInBuffer menunjuk pada panjang yang tidak ditandatangani, yang bukan nol jika mode nonblocking akan diaktifkan dan nol jika ingin dinonaktifkan. Saat soket dibuat, soket beroperasi dalam mode pemblokiran (yaitu, mode nonblocking dinonaktifkan). Ini konsisten dengan soket Berkeley Software Distribution (BSD).

Rutinitas LPWSPAsyncSelect atau LPWSPEventSelect secara otomatis mengatur soket ke mode nonblocking. Jika LPWSPAsyncSelect atau LPWSPEventSelect telah dikeluarkan pada soket, maka setiap upaya untuk menggunakan LPWSPIoctl untuk mengatur soket kembali ke mode pemblokiran akan gagal dengan WSAEINVAL. Untuk mengatur soket kembali ke mode pemblokiran, klien Windows Sockets SPI harus terlebih dahulu menonaktifkan LPWSPAsyncSelect dengan memanggil LPWSPAsyncSelect dengan parameter lEvent sama dengan nol, atau menonaktifkan LPWSPEventSelect dengan memanggil LPWSPEventSelect dengan parameter lNetworkEvents sama dengan nol.

FIONREAD

Tentukan jumlah data yang dapat dibaca secara atomik dari soket. Parameter lpvOutBuffermenunjuk pada panjang yang tidak ditandatangani di mana WSAIoctl menyimpan hasilnya.

Jika soket yang diteruskan dalam parameter s berorientasi aliran (misalnya, jenis SOCK_STREAM), FIONREAD mengembalikan jumlah total data yang dapat dibaca dalam satu operasi penerimaan; ini biasanya sama dengan jumlah total data yang diantrekan pada soket (karena aliran data berorientasi byte, ini tidak dijamin).

Jika soket yang diteruskan dalam parameter s berorientasi pesan (misalnya, jenis SOCK_DGRAM), FIONREAD mengembalikan laporan jumlah total byte yang tersedia untuk dibaca, bukan ukuran datagram pertama (pesan) yang diantrekan pada soket.

SIOCATMARK

Menentukan apakah semua data OOB telah dibaca atau tidak. Ini hanya berlaku untuk soket gaya aliran (misalnya, jenis SOCK_STREAM) yang telah dikonfigurasi untuk penerimaan sebaris dari data OOB apa pun (SO_OOBINLINE). Jika tidak ada data OOB yang menunggu untuk dibaca, operasi mengembalikan TRUE. Jika tidak, ia mengembalikan FALSE, dan operasi penerimaan berikutnya yang dilakukan pada soket akan mengambil beberapa atau semua data sebelum tanda; Klien Windows Sockets SPI harus menggunakan operasi SIOCATMARK untuk menentukan apakah ada yang tersisa. Jika ada data normal yang mendahului data mendesak (OOB), data tersebut akan diterima secara berurutan. (Perhatikan bahwa menerima operasi tidak akan pernah mencampur OOB dan data normal dalam panggilan yang sama.) lpvOutBuffer menunjuk pada BOOL di mana LPWSPIoctl menyimpan hasilnya.

Perintah Windows Sockets 2 berikut ini didukung:

SIO_ACQUIRE_PORT_RESERVATION (pengaturan opcode: I, T==3)

Minta reservasi runtime untuk blok port TCP atau UDP. Untuk reservasi port runtime, kumpulan port mengharuskan reservasi dikonsumsi dari proses yang soket reservasinya diberikan. Reservasi port runtime hanya berlangsung selama masa pakai soket tempat IOCTL SIO_ACQUIRE_PORT_RESERVATION dipanggil. Sebaliknya, reservasi port persisten yang dibuat menggunakan fungsi CreatePersistentTcpPortReservation atau CreatePersistentUdpPortReservation dapat dikonsumsi oleh proses apa pun dengan kemampuan untuk mendapatkan reservasi persisten.

Untuk informasi selengkapnya, lihat referensi SIO_ACQUIRE_PORT_RESERVATION .

SIO_ACQUIRE_PORT_RESERVATION didukung pada Windows Vista dan versi sistem operasi yang lebih baru.

SIO_ADDRESS_LIST_CHANGE (pengaturan opcode: T==1)

Untuk menerima pemberitahuan perubahan dalam daftar alamat transportasi lokal dari keluarga protokol soket tempat klien Windows Sockets SPI dapat mengikat. Tidak ada informasi output yang akan diberikan setelah penyelesaian IOCTL ini; penyelesaian hanya menunjukkan bahwa daftar alamat lokal yang tersedia telah berubah dan harus dikueri lagi melalui SIO_ADDRESS_LIST_QUERY.

Diasumsikan (meskipun tidak diperlukan) bahwa klien Windows Sockets SPI menggunakan I/O yang tumpang tindih untuk diberi tahu tentang perubahan dengan menyelesaikan permintaan SIO_ADDRESS_LIST_CHANGE . Atau, jika SIO_ADDRESS_LIST_CHANGE IOCTL dikeluarkan pada soket nonblocking dan tanpa parameter yang tumpang tindih (lpOverlapped dan lpCompletionRoutine diatur ke NULL), itu akan segera selesai dengan kesalahan WSAEWOULDBLOCK. Klien Windows Sockets SPI kemudian dapat menunggu peristiwa perubahan daftar alamat melalui panggilan ke LPWSPEventSelect atau LPWSPAsyncSelect dengan bit FD_ADDRESS_LIST_CHANGE diatur dalam bitmask peristiwa jaringan.

SIO_ADDRESS_LIST_QUERY (pengaturan opcode: O, T==1)

Mendapatkan daftar alamat transportasi lokal dari keluarga protokol soket tempat aplikasi dapat mengikat. Daftar alamat bervariasi berdasarkan keluarga alamat dan beberapa alamat dikecualikan dari daftar.

Catatan

Di lingkungan Windows Plug-n-Play, alamat dapat ditambahkan dan dihapus secara dinamis. Oleh karena itu, aplikasi tidak dapat mengandalkan informasi yang dikembalikan oleh SIO_ADDRESS_LIST_QUERY persisten. Aplikasi dapat mendaftar untuk pemberitahuan perubahan alamat melalui SIO_ADDRESS_LIST_CHANGE IOCTL yang menyediakan pemberitahuan melalui I/O yang tumpang tindih atau peristiwa FD_ADDRESS_LIST_CHANGE. Urutan tindakan berikut dapat digunakan untuk menjamin bahwa aplikasi selalu memiliki informasi daftar alamat saat ini:

 

  • Masalah SIO_ADDRESS_LIST_CHANGE IOCTL
  • Masalah SIO_ADDRESS_LIST_QUERY IOCTL
  • Setiap kali SIO_ADDRESS_LIST_CHANGE IOCTL memberi tahu penerapan perubahan daftar alamat (baik melalui I/O yang tumpang tindih atau dengan memberi sinyal peristiwa FD_ADDRESS_LIST_CHANGE), seluruh urutan tindakan harus diulang.

Untuk informasi selengkapnya, lihat referensi SIO_ADDRESS_LIST_QUERY . SIO_ADDRESS_LIST_QUERY didukung pada Windows 2000 dan yang lebih baru.

SIO_ASSOCIATE_HANDLE (pengaturan opcode: I, T==1)

Mengaitkan soket ini dengan handel yang ditentukan dari antarmuka pendamping. Buffer input berisi nilai bilangan bulat yang sesuai dengan konstanta manifes untuk antarmuka pendamping (misalnya, TH_NETDEV dan TH_TAPI), diikuti oleh nilai yang merupakan handel antarmuka pendamping yang ditentukan, bersama dengan informasi lain yang diperlukan. Lihat bagian yang sesuai di Windows Sockets 2 Protocol-Specific Annex dan/atau dokumentasi untuk antarmuka pendamping tertentu untuk detail tambahan. (Sumber daya ini mungkin hanya tersedia dalam bahasa Inggris.) Ukuran total tercermin dalam panjang buffer input. Tidak diperlukan buffer output. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung IOCTL ini. Handel yang terkait dengan IOCTL ini dapat diambil menggunakan SIO_TRANSLATE_HANDLE.

Antarmuka pendamping dapat digunakan, misalnya, jika penyedia tertentu menyediakan:

  • Banyak kontrol tambahan atas perilaku soket.
  • Kontrol khusus penyedia yang tidak memetakan ke fungsi Windows Socket yang ada (atau yang kemungkinan untuk masa depan).

Disarankan agar Model Objek Komponen (COM) digunakan alih-alih IOCTL ini untuk menemukan dan melacak antarmuka lain yang mungkin didukung oleh soket. IOCTL ini hadir untuk kompatibilitas mundur dengan sistem di mana COM tidak tersedia atau tidak dapat digunakan karena alasan lain.

SIO_ASSOCIATE_PORT_RESERVATION (pengaturan opcode: I, T==3)

Kaitkan soket dengan reservasi persisten atau runtime untuk blok port TCP atau UDP yang diidentifikasi oleh token reservasi port. IOCTL SIO_ASSOCIATE_PORT_RESERVATION harus dikeluarkan sebelum soket terikat. Jika dan ketika soket terikat, port yang ditetapkan untuk itu akan dipilih dari reservasi port yang diidentifikasi oleh token yang diberikan. Jika tidak ada port yang tersedia dari reservasi yang ditentukan, panggilan fungsi Bind akan gagal.

Untuk informasi selengkapnya, lihat referensi SIO_ASSOCIATE_PORT_RESERVATION .

SIO_ASSOCIATE_PORT_RESERVATION didukung pada Windows Vista dan versi sistem operasi yang lebih baru.

SIO_BASE_HANDLE (pengaturan opcode: O, T==1)

Mengambil handel penyedia layanan dasar untuk soket tertentu. Nilai yang dikembalikan adalah SOCKET.

Penyedia layanan berlapis tidak boleh mencegat IOCTL ini karena nilai yang dikembalikan harus merupakan handel soket dari penyedia layanan dasar.

Jika buffer output tidak cukup besar untuk handel soket ( cbOutBuffer kurang dari ukuran SOCKET) atau parameter lpvOutBuffer adalah pointerNULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEFAULT.

SIO_BASE_HANDLE didefinisikan dalam file header Mswsock.h dan didukung pada Windows Vista dan yang lebih baru.

SIO_BSP_HANDLE (pengaturan opcode: O, T==1)

Mengambil handel penyedia layanan dasar untuk soket yang digunakan oleh fungsi WSASendMsg . Nilai yang dikembalikan adalah SOCKET.

Ioctl ini digunakan oleh penyedia layanan berlapis untuk memastikan penyedia mencegat fungsi WSASendMsg .

Jika buffer output tidak cukup besar untuk handel soket ( cbOutBuffer kurang dari ukuran SOCKET) atau parameter lpvOutBuffer adalah pointerNULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEFAULT.

SIO_BSP_HANDLE didefinisikan dalam file header Mswsock.h dan didukung pada Windows Vista dan yang lebih baru.

SIO_BSP_HANDLE_SELECT (pengaturan opcode: O, T==1)

Mengambil handel penyedia layanan dasar untuk soket yang digunakan oleh fungsi pilih . Nilai yang dikembalikan adalah SOCKET.

Ioctl ini digunakan oleh penyedia layanan berlapis untuk memastikan penyedia mencegat fungsi pilih .

Jika buffer output tidak cukup besar untuk handel soket ( cbOutBuffer kurang dari ukuran SOCKET) atau parameter lpvOutBuffer adalah pointerNULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEFAULT.

SIO_BSP_HANDLE_SELECT didefinisikan dalam file header Mswsock.h dan didukung di Windows Vista dan yang lebih baru.

SIO_BSP_HANDLE_POLL (pengaturan opcode: O, T==1)

Mengambil handel penyedia layanan dasar untuk soket yang digunakan oleh fungsi WSAPoll . Parameter lpOverlapped harus berupa pointer NULL . Nilai yang dikembalikan adalah SOCKET.

Ioctl ini digunakan oleh penyedia layanan berlapis untuk memastikan penyedia mencegat fungsi WSAPoll .

Jika buffer output tidak cukup besar untuk handel soket ( cbOutBuffer kurang dari ukuran SOCKET), parameter lpvOutBuffer adalah pointerNULL , atau parameter lpOverlapped bukan penunjuk NULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL ini dan WSAGetLastError mengembalikan WSAEFAULT.

SIO_BSP_HANDLE_POLL didefinisikan dalam file header Mswsock.h dan didukung pada Windows Vista dan yang lebih baru.

SIO_CHK_QOS (pengaturan opcode: I, O, T==3)

Mengambil informasi tentang karakteristik lalu lintas QoS. Selama fase transisi pada sistem pengiriman antara pengaturan alur dan penerimaan pesan RESV (lihat Bagaimana Layanan RSVP Memanggil TC untuk informasi lebih lanjut tentang fase transisi), lalu lintas yang terkait dengan alur RSVP dibentuk berdasarkan jenis layanan ( BEST EFFORT, CONTROLLED LOAD, atau GUARANTEED). Untuk informasi selengkapnya, lihat Menggunakan SIO_CHK_QOS di bagian Kualitas Layanan pada Kit Pengembangan Perangkat Lunak Platform (SDK).

SIO_ENABLE_CIRCULAR_QUEUEING (pengaturan opcode: V, T==1)

Menunjukkan kepada penyedia layanan berorientasi pesan bahwa pesan yang baru tiba tidak boleh dihilangkan karena antrean buffer meluap. Sebaliknya, pesan tertua dalam antrean harus dihilangkan untuk mengakomodasi pesan yang baru tiba. Tidak diperlukan buffer input dan output. Perhatikan bahwa IOCTL ini hanya berlaku untuk soket yang terkait dengan protokol yang tidak dapat diandalkan dan berorientasi pesan. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung IOCTL ini.

SIO_FIND_ROUTE (pengaturan opcode: O, T==1)

Ketika diterbitkan, IOCTL ini meminta agar rute ke alamat jarak jauh yang ditentukan sebagai sockaddr di buffer input ditemukan. Jika alamat sudah ada di cache lokal, entrinya tidak valid. Dalam kasus IPX Novell, panggilan ini memulai IPX GetLocalTarget (GLT), yang meminta jaringan untuk alamat jarak jauh yang diberikan.

SIO_FLUSH (pengaturan opcode: V, T==1)

Membuang isi saat ini dari antrean pengiriman yang terkait dengan soket ini. Tidak diperlukan buffer input dan output. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung IOCTL ini.

SIO_GET_BROADCAST_ADDRESS (pengaturan opcode: O, T==1)

IOCTL ini mengisi buffer output dengan struktur sockaddr yang berisi alamat siaran yang cocok untuk digunakan dengan LPWSPSendTo.

SIO_GET_EXTENSION_FUNCTION_POINTER (pengaturan opcode: O, I, T==1)

Ambil pointer ke fungsi ekstensi yang ditentukan yang didukung oleh penyedia layanan terkait. Buffer input berisi pengidentifikasi unik global (GUID) yang nilainya mengidentifikasi fungsi ekstensi yang dimaksud. Penunjuk ke fungsi yang diinginkan dikembalikan dalam buffer output. Pengidentifikasi fungsi ekstensi ditetapkan oleh vendor penyedia layanan dan harus disertakan dalam dokumentasi vendor yang menjelaskan kemampuan fungsi ekstensi dan semantik.

Nilai GUID untuk fungsi ekstensi yang didukung oleh penyedia layanan Windows TCP/IP ditentukan dalam file header Mswsock.h . Nilai yang mungkin untuk GUID ini adalah sebagai berikut:

Istilah Deskripsi
WSAID_ACCEPTEX
Fungsi ekstensi AcceptEx .
WSAID_CONNECTEX
Fungsi ekstensi ConnectEx .
WSAID_DISCONNECTEX
Fungsi ekstensi DisconnectEx .
WSAID_GETACCEPTEXSOCKADDRS
Fungsi ekstensi GetAcceptExSockaddrs .
WSAID_TRANSMITFILE
Fungsi ekstensi TransmitFile .
WSAID_TRANSMITPACKETS
Fungsi ekstensi TransmitPackets .
WSAID_WSARECVMSG
Fungsi ekstensi LPFN_WSARECVMSG (WSARecvMsg).
WSAID_WSASENDMSG
Fungsi ekstensi WSASendMsg .

 

SIO_GET_GROUP_QOS (pengaturan opcode: O, T==1)

Dicadangkan.

SIO_GET_INTERFACE_LIST (pengaturan opcode: O, T==0)

Mengembalikan daftar antarmuka IP yang dikonfigurasi dan parameternya sebagai array struktur INTERFACE_INFO .

Catatan

Dukungan perintah ini wajib untuk penyedia layanan TCP/IP yang mematuhi Windows Sockets 2.

 

Parameter lpvOutBuffer menunjuk ke buffer untuk menyimpan informasi tentang antarmuka sebagai array struktur INTERFACE_INFO untuk alamat IP unicast pada antarmuka. Parameter cbOutBuffer menentukan panjang buffer output. Jumlah antarmuka yang dikembalikan (jumlah struktur yang dikembalikan dalam buffer yang ditunjukkan oleh parameter lpvOutBuffer ) dapat ditentukan berdasarkan panjang aktual buffer output yang dikembalikan dalam parameter lpcbBytesReturned .

Jika fungsi WSAIoctl dipanggil dengan SIO_GET_INTERFACE_LIST dan anggota tingkat parameter soket tidak didefinisikan sebagai IPPROTO_IP, WSAEINVAL dikembalikan. Panggilan ke fungsi WSAIoctl dengan SIO_GET_INTERFACE_LIST mengembalikan WSAEFAULT jika parameter cbOutBuffer yang menentukan panjang buffer output terlalu kecil ro menerima daftar antarmuka yang dikonfigurasi.

SIO_GET_INTERFACE_LIST_EX (pengaturan opcode: O, T==0)

Dicadangkan untuk digunakan di masa mendatang dengan soket.

Mengembalikan daftar antarmuka IP yang dikonfigurasi dan parameternya sebagai array struktur INTERFACE_INFO_EX .

Parameter lpvOutBuffer menunjuk ke buffer untuk menyimpan informasi tentang antarmuka sebagai array struktur INTERFACE_INFO_EX untuk alamat IP unicast pada antarmuka. Parameter cbOutBuffer menentukan panjang buffer output. Jumlah antarmuka yang dikembalikan (jumlah struktur yang dikembalikan dalam lpvOutBuffer) dapat ditentukan berdasarkan panjang aktual buffer output yang dikembalikan dalam parameter lpcbBytesReturned .

SIO_GET_INTERFACE_LIST_EX saat ini tidak didukung pada Windows.

SIO_GET_QOS (pengaturan opcode: O, T==1)

Mengambil struktur QOS yang terkait dengan soket. Buffer input bersifat opsional. Beberapa protokol (misalnya, RSVP) memungkinkan buffer input digunakan untuk memenuhi syarat permintaan QOS . Struktur QOS akan disalin ke dalam buffer output. Buffer output harus berukuran cukup besar untuk dapat berisi struktur QOS penuh. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung kualitas layanan.

SIO_IDEAL_SEND_BACKLOG_CHANGE (pengaturan opcode: V, T==0)

Memberi tahu aplikasi ketika nilai kirim backlog (ISB) yang ideal berubah untuk koneksi yang mendasar.

Saat mengirim data melalui koneksi TCP menggunakan soket Windows, penting untuk menjaga jumlah data yang memadai (dikirim tetapi belum diakui) di TCP untuk mencapai throughput tertinggi. Nilai ideal untuk jumlah data yang luar biasa untuk mencapai throughput terbaik untuk koneksi TCP disebut ukuran send backlog (ISB) yang ideal. Nilai ISB adalah fungsi dari produk penundaan bandwidth koneksi TCP dan jendela penerima yang diiklankan penerima (dan sebagian jumlah kemacetan dalam jaringan).

Nilai ISB per koneksi tersedia dari implementasi protokol TCP di Windows Server 2008, Windows Vista dengan Paket Layanan 1 (SP1), dan versi sistem operasi yang lebih baru. IOCTL SIO_IDEAL_SEND_BACKLOG_CHANGE dapat digunakan oleh aplikasi untuk mendapatkan pemberitahuan ketika nilai ISB berubah secara dinamis untuk koneksi.

Untuk informasi selengkapnya, lihat referensi SIO_IDEAL_SEND_BACKLOG_CHANGE .

SIO_IDEAL_SEND_BACKLOG_CHANGE didukung pada Windows Server 2008, Windows Vista dengan SP1, dan versi sistem operasi yang lebih baru.

SIO_IDEAL_SEND_BACKLOG_QUERY (pengaturan opcode: O, T==0)

Mengambil nilai send backlog (ISB) yang ideal untuk koneksi yang mendasar.

Saat mengirim data melalui koneksi TCP menggunakan soket Windows, penting untuk menjaga jumlah data yang memadai (dikirim tetapi belum diakui) di TCP untuk mencapai throughput tertinggi. Nilai ideal untuk jumlah data yang luar biasa untuk mencapai throughput terbaik untuk koneksi TCP disebut ukuran send backlog (ISB) yang ideal. Nilai ISB adalah fungsi dari produk penundaan bandwidth koneksi TCP dan jendela penerima yang diiklankan penerima (dan sebagian jumlah kemacetan dalam jaringan).

Nilai ISB per koneksi tersedia dari implementasi protokol TCP di Windows Server 2008 dan yang lebih baru. IOCTL SIO_IDEAL_SEND_BACKLOG_QUERY dapat digunakan oleh aplikasi untuk mengkueri nilai ISB untuk koneksi.

Untuk informasi selengkapnya, lihat referensi SIO_IDEAL_SEND_BACKLOG_QUERY .

SIO_IDEAL_SEND_BACKLOG_QUERY didukung pada Windows Server 2008, Windows Vista dengan SP1, dan versi sistem operasi yang lebih baru.

SIO_KEEPALIVE_VALS (pengaturan opcode: I, T==3)

Mengaktifkan atau menonaktifkan pengaturan per koneksi dari opsi TCP keep-alive yang menentukan batas waktu dan interval TCP keep-alive. Untuk informasi selengkapnya tentang opsi tetap hidup, lihat bagian 4.2.3.6 tentang Persyaratan untuk Host Internet—Lapisan Komunikasi yang ditentukan dalam RFC 1122 tersedia di situs web IETF.

SIO_KEEPALIVE_VALS dapat digunakan untuk mengaktifkan atau menonaktifkan pemeriksaan tetap aktif dan mengatur batas waktu dan interval tetap hidup. Batas waktu tetap hidup menentukan batas waktu, dalam milidetik, tanpa aktivitas hingga paket tetap aktif pertama dikirim. Interval tetap hidup menentukan interval, dalam milidetik, antara ketika paket tetap hidup berturut-turut dikirim jika tidak ada pengakuan yang diterima.

Opsi SO_KEEPALIVE , yang merupakan salah satu Opsi Soket SOL_SOCKET, juga dapat digunakan untuk mengaktifkan atau menonaktifkan TCP tetap hidup pada koneksi, serta mengkueri status opsi ini saat ini. Untuk mengkueri apakah TCP tetap aktif diaktifkan pada soket, fungsi getsockopt dapat dipanggil dengan opsi SO_KEEPALIVE . Untuk mengaktifkan atau menonaktifkan TCP tetap hidup, fungsi setsockopt dapat dipanggil dengan opsi SO_KEEPALIVE . Jika TCP tetap hidup diaktifkan dengan SO_KEEPALIVE, maka pengaturan TCP default digunakan untuk batas waktu dan interval tetap hidup kecuali nilai-nilai ini telah diubah menggunakan SIO_KEEPALIVE_VALS.

Untuk informasi selengkapnya, lihat referensi SIO_KEEPALIVE_VALS . SIO_KEEPALIVE_VALS didukung pada Windows 2000 dan yang lebih baru.

SIO_MULTIPOINT_LOOPBACK (pengaturan opcode: I, T==1)

Mengontrol apakah data yang dikirim oleh aplikasi di komputer lokal (belum tentu oleh soket yang sama) dalam sesi multicast akan diterima oleh soket yang bergabung ke grup tujuan multicast pada antarmuka loopback. Nilai TRUE menyebabkan data multicast yang dikirim oleh aplikasi di komputer lokal dikirimkan ke soket mendengarkan pada antarmuka loopback. Nilai FALSE mencegah data multicast yang dikirim oleh aplikasi di komputer lokal dikirimkan ke soket mendengarkan pada antarmuka loopback. Secara default, SIO_MULTIPOINT_LOOPBACK diaktifkan.

SIO_MULTICAST_SCOPE (pengaturan opcode: I, T==1)

Menentukan cakupan di mana transmisi multicast akan terjadi. Cakupan didefinisikan sebagai jumlah segmen jaringan rute yang akan dicakup. Cakupan nol akan menunjukkan bahwa transmisi multicast tidak akan ditempatkan pada kawat, tetapi dapat disebarluaskan di seluruh soket dalam host lokal. Nilai cakupan 1 (default) menunjukkan bahwa transmisi akan ditempatkan pada kawat, tetapi tidak akan melintasi router apa pun. Nilai cakupan yang lebih tinggi menentukan jumlah router yang dapat disilangkan. Perhatikan bahwa ini sesuai dengan parameter time-to-live (TTL) dalam multicasting IP.

SIO_QUERY_RSS_SCALABILITY_INFO (pengaturan opcode: O, T==3)

Kueri antarmuka offload untuk kemampuan penskalaan sisi penerimaan (RSS). Struktur argumen yang dikembalikan untuk SIO_QUERY_RSS_SCALABILITY_INFO ditentukan dalam struktur RSS_SCALABILITY_INFO yang ditentukan dalam file header Mstcpip.h . Struktur ini didefinisikan sebagai berikut.

void CALLBACK 
CompletionRoutine(  
  IN DWORD           dwError, 
  IN DWORD           cbTransferred, 
  IN LPWSAOVERLAPPED lpOverlapped, 
  IN DWORD           dwFlags 
);

Nilai yang dikembalikan dalam anggota RssEnabled menunjukkan apakah RSS diaktifkan pada setidaknya satu antarmuka.

Jika buffer output tidak cukup besar untuk struktur RSS_SCALABILITY_INFO ( cbOutBuffer kurang dari ukuran RSS_SCALABILITY_INFO) atau parameter lpvOutBuffer adalah penunjuk NULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEINVAL.

Dalam jaringan berkecepatan tinggi di mana beberapa CPU berada dalam satu sistem, kemampuan tumpukan protokol jaringan untuk menskalakan dengan baik pada sistem multi-CPU dihambat karena arsitektur NDIS 5.1 dan batas versi yang lebih lama menerima pemrosesan protokol ke satu CPU. Penskalan sisi penerimaan (RSS) menyelesaikan masalah ini dengan memungkinkan beban jaringan dari adaptor jaringan seimbang di beberapa CPU.

SIO_QUERY_RSS_SCALABILITY_INFO didukung pada Windows Vista dan yang lebih baru.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (pengaturan opcode: O, T==3)

Mengkueri handel titik akhir Application Layer Enforcement (ALE).

Windows Filtering Platform (WFP) mendukung inspeksi dan modifikasi lalu lintas jaringan. Di Windows Vista, WFP berfokus pada skenario di mana komputer host adalah titik akhir komunikasi. Di Windows Server 2008 , namun, ada implementasi firewall tepi yang ingin memanfaatkan platform WFP untuk memeriksa dan memproksi lalu lintas pass-through. Server Internet Security and Acceleration (ISA) adalah contoh perangkat edge tersebut.

Ada beberapa skenario firewall yang mungkin memerlukan kemampuan untuk menyuntikkan paket masuk ke jalur pengiriman yang terkait dengan titik akhir yang ada. Perlu ada mekanisme untuk menemukan handel titik akhir lapisan transportasi yang terkait dengan titik akhir tujuan. Aplikasi yang membuat titik akhir memiliki titik akhir lapisan transportasi ini. IOCTL ini digunakan untuk menyediakan handel soket untuk pemetaan handel titik akhir lapisan transportasi.

Jika buffer output tidak cukup besar untuk handel titik akhir ( cbOutBuffer kurang dari ukuran UINT64) atau parameter lpvOutBuffer adalah penunjuk NULL , SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEINVAL.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE didukung pada Windows Vista dan yang lebih baru.

SIO_QUERY_PNP_TARGET_HANDLE (pengaturan opcode: O, T==1)

Untuk mendapatkan pendeskripsi soket penyedia berikutnya dalam rantai tempat soket saat ini bergantung pada indera PnP. IOCTL ini dipanggil oleh Windows Sockets 2 DLL hanya pada soket penyedia layanan non-IFS yang dibuat melalui panggilan WPUCreateSocketHandle . Penyedia harus kembali dalam buffer output handel soket penyedia berikutnya dalam rantai di mana handel soket tertentu tergantung dalam arti PnP (misalnya, penghapusan perangkat yang mendukung handel yang mendasar akan mengakibatkan pembatalan handel di atasnya dalam rantai).

Jika operasi yang tumpang tindih segera selesai, fungsi ini mengembalikan nilai nol dan parameter lpcbBytesReturned diperbarui dengan jumlah byte dalam buffer output. Jika operasi yang tumpang tindih berhasil dimulai dan akan selesai nanti, fungsi ini mengembalikan SOCKET_ERROR dan menunjukkan kode kesalahan WSA_IO_PENDING. Dalam hal ini, lpcbBytesReturned tidak diperbarui. Ketika operasi yang tumpang tindih selesai, jumlah data dalam buffer output ditunjukkan baik melalui parameter cbTransferred dalam rutinitas penyelesaian (jika ditentukan), atau melalui parameter lpcbTransfer di LPWSPGetOverlappedResult.

SIO_RCVALL (pengaturan opcode: I, T==3)

Memungkinkan soket untuk menerima semua paket IPv4 atau IPv6 yang melewati antarmuka jaringan. Handel soket yang diteruskan ke fungsi WSAIoctl harus salah satu dari berikut ini:

  • Soket IPv4 yang dibuat dengan keluarga alamat diatur ke AF_INET, jenis soket diatur ke SOCK_RAW, dan protokol diatur ke IPPROTO_IP.
  • Soket IPv6 yang dibuat dengan keluarga alamat diatur ke AF_INET6, jenis soket diatur ke SOCK_RAW, dan protokol diatur ke IPPROTO_IPV6.

Soket juga harus terikat ke antarmuka IPv4 atau IPv6 lokal eksplisit, yang berarti Anda tidak dapat mengikat ke INADDR_ANY atau in6addr_any.

Pada Windows Server 2008 dan yang lebih lama, pengaturan IOCTL SIO_RCVALL tidak akan mengambil paket lokal yang dikirim dari antarmuka jaringan. Ini termasuk paket yang diterima pada antarmuka lain dan diteruskan antarmuka jaringan yang ditentukan untuk SIO_RCVALL IOCTL.

Pada Windows 7 dan Windows Server 2008 R2 , ini diubah sehingga paket lokal yang dikirim dari antarmuka jaringan juga ditangkap. Ini termasuk paket yang diterima pada antarmuka lain dan kemudian meneruskan antarmuka jaringan yang terikat ke soket dengan SIO_RCVALL IOCTL.

Menyetel IOCTL ini memerlukan hak istimewa Administrator pada komputer lokal.

Fitur ini terkadang disebut sebagai mode promiscuous.

Nilai yang mungkin untuk opsi IOCTL SIO_RCVALL ditentukan dalam enumerasi RCVALL_VALUE yang ditentukan dalam file header Mstcpip.h . Nilai yang mungkin untuk SIO_RCVALL adalah sebagai berikut:

Istilah Deskripsi
RCVALL_OFF
Nonaktifkan opsi ini sehingga soket tidak menerima semua paket IPv4 atau IPv6 pada jaringan.
RCVALL_ON
Aktifkan opsi ini sehingga soket menerima semua paket IPv4 atau IPv6 di jaringan. Opsi ini memungkinkan mode promiscuous pada kartu antarmuka jaringan (NIC), jika NIC mendukung mode promiscuous. Pada segmen LAN dengan hub jaringan, NIC yang mendukung mode promiscuous akan menangkap semua lalu lintas IPv4 atau IPv6 di LAN, termasuk lalu lintas antara komputer lain pada segmen LAN yang sama. Semua paket yang ditangkap (IPv4 atau IPv6, tergantung pada soket) akan dikirimkan ke soket mentah.
Opsi ini tidak akan mengambil paket lain (paket ARP, IPX, dan NetBEUI, misalnya) pada antarmuka.
Netmon menggunakan mode yang sama untuk antarmuka jaringan, tetapi tidak menggunakan opsi ini untuk menangkap lalu lintas.
RCVALL_SOCKETLEVELONLY
Fitur ini saat ini tidak diimplementasikan, jadi pengaturan opsi ini tidak memiliki pengaruh apa pun.
RCVALL_IPLEVEL
Aktifkan opsi ini sehingga soket IPv4 atau IPv6 menerima semua paket di tingkat IP pada jaringan. Opsi ini tidak mengaktifkan mode promiscuous pada kartu antarmuka jaringan. Opsi ini hanya memengaruhi pemrosesan paket di tingkat IP. NIC masih hanya menerima paket yang diarahkan ke alamat unicast dan multicast yang dikonfigurasi. Namun, soket dengan opsi ini diaktifkan akan menerima tidak hanya paket yang diarahkan ke alamat IP tertentu, tetapi akan menerima semua paket IPv4 atau IPv6 yang diterima NIC.
Opsi ini tidak akan mengambil paket lain (paket ARP, IPX, dan NetBEUI, misalnya) yang diterima pada antarmuka.

Untuk informasi selengkapnya, lihat referensi SIO_RCVALL .

SIO_RCVALL didukung pada Windows 2000 dan yang lebih baru.

SIO_RELEASE_PORT_RESERVATION (pengaturan opcode: I, T==3)

Merilis reservasi runtime untuk blok port TCP atau UDP. Reservasi runtime yang akan dirilis harus diperoleh dari proses penerbitan menggunakan SIO_ACQUIRE_PORT_RESERVATION IOCTL.

Untuk informasi selengkapnya, lihat referensi SIO_RELEASE_PORT_RESERVATION .

SIO_RELEASE_PORT_RESERVATION didukung pada Windows Vista dan versi sistem operasi yang lebih baru.

SIO_ROUTING_INTERFACE_CHANGE (pengaturan opcode: I, T==1)

Untuk menerima pemberitahuan perubahan antarmuka perutean yang harus digunakan untuk menjangkau alamat jarak jauh di buffer input (ditentukan sebagai struktur sockaddr ). Tidak ada informasi output pada antarmuka perutean baru yang akan diberikan setelah menyelesaikan IOCTL ini; penyelesaian hanya menunjukkan bahwa antarmuka perutean untuk tujuan tertentu telah berubah dan harus dikueri menggunakan SIO_ROUTING_INTERFACE_QUERY IOCTL.

Diasumsikan (meskipun tidak diperlukan) bahwa aplikasi menggunakan I/O yang tumpang tindih untuk diberi tahu tentang perubahan antarmuka perutean melalui penyelesaian permintaan SIO_ROUTING_INTERFACE_CHANGE . Atau, jika SIO_ROUTING_INTERFACE_CHANGE IOCTL dikeluarkan pada soket non-pemblokiran dengan parameter lpOverlapped dan lpCompletionRoutine yang diatur ke NULL), itu akan segera selesai dengan kesalahan WSAEWOULDBLOCK dan klien Windows Socket SPI kemudian dapat menunggu peristiwa perubahan perutean menggunakan panggilan ke LPWSPEventSelect atau LPWSPAsyncSelect dengan bit FD_ROUTING_INTERFACE_CHANGE diatur dalam bitmask peristiwa jaringan.

Diakui bahwa informasi perutean tetap stabil dalam banyak kasus sehingga mengharuskan aplikasi untuk menyimpan beberapa IOCTL yang luar biasa untuk mendapatkan pemberitahuan tentang semua tujuan yang diminatinya serta meminta penyedia layanan melacak permintaan pemberitahuan ini akan menggunakan sumber daya sistem dalam jumlah yang signifikan. Situasi ini dapat dihindari dengan memperluas arti parameter input dan melonggarkan persyaratan penyedia layanan sebagai berikut:

Klien Windows Sockets SPI dapat menentukan alamat wildcard khusus keluarga protokol (sama seperti yang digunakan dalam panggilan Ikat saat meminta untuk mengikat ke alamat yang tersedia) untuk meminta pemberitahuan tentang setiap perubahan perutean. Ini memungkinkan klien Windows Sockets SPI untuk menyimpan hanya satu SIO_ROUTING_INTERFACE_CHANGE yang luar biasa untuk semua soket dan tujuan yang dimilikinya dan kemudian menggunakan SIO_ROUTING_INTERFACE_QUERY untuk mendapatkan informasi perutean aktual.

Penyedia layanan dapat memilih untuk mengabaikan informasi yang disediakan oleh klien Windows Sockets SPI dalam buffer input SIO_ROUTING_INTERFACE_CHANGE (seolah-olah klien SPI Soket Windows menentukan alamat kartubebas) dan menyelesaikan SIO_ROUTING_INTERFACE_CHANGE IOCTL atau peristiwa FD_ROUTING_INTERFACE_CHANGE sinyal jika terjadi perubahan informasi perutean (bukan hanya rute ke tujuan yang ditentukan dalam buffer input).

SIO_ROUTING_INTERFACE_QUERY (pengaturan opcode: I, O, T==1)

Untuk mendapatkan alamat antarmuka lokal (direpresentasikan sebagai struktur sockaddr ) yang harus digunakan untuk mengirim ke alamat jarak jauh yang ditentukan dalam buffer input (sebagai sockaddr). Alamat multicast jarak jauh dapat dikirimkan dalam buffer input untuk mendapatkan alamat antarmuka pilihan untuk transmisi multicast. Bagaimanapun, alamat antarmuka yang dikembalikan dapat digunakan oleh aplikasi dalam permintaan Bind berikutnya.

Perhatikan bahwa rute dapat berubah. Oleh karena itu, klien Windows Socket SPI tidak dapat mengandalkan informasi yang dikembalikan oleh SIO_ROUTING_INTERFACE_QUERY persisten. Klien SPI dapat mendaftar untuk pemberitahuan perubahan perutean menggunakan SIO_ROUTING_INTERFACE_CHANGE IOCTL, yang menyediakan pemberitahuan melalui I/O yang tumpang tindih atau peristiwa FD_ROUTING_INTERFACE_CHANGE. Urutan tindakan berikut dapat digunakan untuk menjamin bahwa klien Windows Socket SPI selalu memiliki informasi antarmuka perutean saat ini untuk tujuan tertentu:

  • Masalah SIO_ROUTING_INTERFACE_CHANGE IOCTL.
  • Masalah SIO_ROUTING_INTERFACE_QUERY IOCTL.
  • Setiap kali SIO_ROUTING_INTERFACE_CHANGE IOCTL memberi tahu klien WinSock SPI tentang perubahan perutean (baik melalui I/O yang tumpang tindih atau dengan memberi sinyal peristiwa FD_ROUTING_INTERFACE_CHANGE), seluruh urutan tindakan harus diulang.

Jika buffer output tidak cukup besar untuk berisi alamat antarmuka, SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL dan WSAGetLastError ini mengembalikan WSAEFAULT. Ukuran buffer output yang diperlukan akan dikembalikan dalam lpcbBytesReturned dalam kasus ini. Perhatikan bahwa kode kesalahan WSAEFAULT juga dikembalikan jika parameter lpvInBuffer, lpvOutBuffer, atau lpcbBytesReturned tidak sepenuhnya terkandung dalam bagian ruang alamat pengguna yang valid.

Jika alamat tujuan yang ditentukan dalam buffer input tidak dapat dicapai melalui salah satu antarmuka yang tersedia, SOCKET_ERROR dikembalikan sebagai hasil dari IOCTL ini dan WSAGetLastError mengembalikan WSAENETUNREACH atau bahkan WSAENETDOWN jika semua konektivitas jaringan hilang.

SIO_SET_COMPATIBILITY_MODE (pengaturan opcode: I, T==3)

Meminta bagaimana tumpukan jaringan harus menangani perilaku tertentu yang cara default untuk menangani perilaku mungkin berbeda di seluruh versi Windows. Struktur argumen untuk SIO_SET_COMPATIBILITY_MODE ditentukan dalam struktur WSA_COMPATIBILITY_MODE yang ditentukan dalam file header Mswsockdef.h . Struktur ini didefinisikan sebagai berikut:

} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;

Nilai yang ditentukan dalam anggota BehaviorId menunjukkan perilaku yang diminta. Nilai yang ditentukan dalam anggota TargetOsVersion menunjukkan versi Windows yang diminta untuk perilaku tersebut.

Anggota BehaviorId dapat menjadi salah satu nilai dari jenis enumerasi WSA_COMPATIBILITY_BEHAVIOR_ID yang ditentukan dalam file header Mswsockdef.h . Nilai yang mungkin untuk anggota BehaviorId adalah sebagai berikut

Istilah Deskripsi
WsaBehaviorAll
Ini setara dengan meminta semua kemungkinan perilaku kompatibel yang ditentukan untuk WSA_COMPATIBILITY_BEHAVIOR_ID.
WsaBehaviorReceiveBuffering
Ketika anggota TargetOsVersion diatur ke nilai untuk Windows Vista atau yang lebih baru, pengurangan ukuran buffer penerima TCP pada soket ini menggunakan opsi soket SO_RCVBUF diizinkan bahkan setelah koneksi TCP dibuat.
Ketika anggota TargetOsVersion diatur ke nilai yang lebih lama dari Windows Vista, pengurangan ukuran buffer penerima TCP pada soket ini menggunakan opsi soket SO_RCVBUF tidak diizinkan setelah pembentukan koneksi.
WsaBehaviorAutoTuning
Ketika anggota TargetOsVersion diatur ke nilai untuk Windows Vista atau yang lebih baru, terima penyetelan otomatis jendela diaktifkan dan faktor skala jendela TCP dikurangi menjadi 2 dari nilai default 8.
Ketika TargetOsVersion diatur ke nilai yang lebih lama dari Windows Vista, terima penyetelan otomatis jendela dinonaktifkan. Opsi penskalaan jendela TCP juga dinonaktifkan dan ukuran jendela penerimaan true maksimum dibatasi hingga 65.535 byte. Opsi penskalaan jendela TCP tidak dapat dinegosiasikan pada koneksi meskipun opsi soket SO_RCVBUF dipanggil pada soket ini yang menentukan nilai yang lebih besar dari 65.535 byte sebelum koneksi dibuat.

 

Untuk informasi selengkapnya, lihat referensi SIO_SET_COMPATIBILITY_MODE .

SIO_SET_COMPATIBILITY_MODE didukung pada Windows Vista dan yang lebih baru.

SIO_SET_GROUP_QOS (pengaturan opcode: I, T==1)

Dicadangkan.

SIO_SET_QOS (pengaturan opcode: I, T==1)

Kaitkan struktur QOS yang disediakan dengan soket. Tidak diperlukan buffer output, struktur QOS akan diperoleh dari buffer input. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung kualitas layanan.

SIO_TRANSLATE_HANDLE (pengaturan opcode: I, O, T==1)

Untuk mendapatkan handel yang sesuai untuk soket yang valid dalam konteks antarmuka pendamping (misalnya, TH_NETDEV dan TH_TAPI). Konstanta manifes yang mengidentifikasi antarmuka pendamping bersama dengan parameter lain yang diperlukan ditentukan dalam buffer input. Handel yang sesuai akan tersedia di buffer output setelah menyelesaikan fungsi ini. Lihat bagian yang sesuai di Windows Sockets 2 Protocol-Specific Annex dan/atau dokumentasi untuk antarmuka pendamping tertentu untuk detail tambahan. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung IOCTL ini untuk antarmuka pendamping yang ditentukan. IOCTL ini mengambil handel yang terkait menggunakan SIO_TRANSLATE_HANDLE.

Disarankan agar COM digunakan alih-alih IOCTL ini untuk menemukan dan melacak antarmuka lain yang mungkin didukung oleh soket. IOCTL ini hadir untuk kompatibilitas mundur dengan sistem di mana COM tidak tersedia atau tidak dapat digunakan karena alasan lain.

SIO_UDP_CONNRESET (pengaturan opcode: I, T==3)

Windows XP: Mengontrol apakah pesan PORT_UNREACHABLE UDP dilaporkan. Atur ke TRUE untuk mengaktifkan pelaporan. Atur ke FALSE untuk menonaktifkan pelaporan.

Ketika dipanggil dengan soket yang tumpang tindih, parameter lpOverlapped harus valid selama operasi yang tumpang tindih.

Jika parameter lpCompletionRoutine adalah NULL, penyedia layanan memberi sinyal kepada anggota hEventdari lpOverlapped ketika operasi yang tumpang tindih selesai jika berisi handel objek peristiwa yang valid. Klien Windows Sockets SPI dapat menggunakan LPWSPGetOverlappedResult untuk melakukan polling atau menunggu objek peristiwa.

Jika lpCompletionRoutine bukan NULL, anggota hEvent diabaikan dan dapat digunakan oleh klien Windows Sockets SPI untuk meneruskan informasi konteks ke rutinitas penyelesaian. Klien yang melewati lpCompletionRoutinenon-NULL dan kemudian memanggil WSAGetOverlappedResult untuk permintaan I/O yang tumpang tindih yang sama mungkin tidak mengatur parameter fWait untuk pemanggilan WSAGetOverlappedResult ke TRUE. Dalam hal ini, penggunaan anggota hEvent tidak terdefinisi, dan mencoba menunggu anggota hEvent akan menghasilkan hasil yang tidak dapat diprediksi.

Merupakan tanggung jawab penyedia layanan untuk mengatur pemanggilan klien yang ditentukan–rutinitas penyelesaian ketika operasi yang tumpang tindih selesai. Karena rutinitas penyelesaian harus dijalankan dalam konteks utas yang sama yang memulai operasi yang tumpang tindih, itu tidak dapat dipanggil langsung dari penyedia layanan. WS2_32.DLL menawarkan mekanisme panggilan prosedur asinkron (APC) untuk memfasilitasi pemanggilan rutinitas penyelesaian.

Penyedia layanan mengatur agar fungsi dijalankan dalam rangkaian dan konteks proses yang tepat dengan memanggil WPUQueueApc. Fungsi ini dapat dipanggil dari konteks proses dan utas apa pun, bahkan konteks yang berbeda dari utas dan proses yang digunakan untuk memulai operasi yang tumpang tindih.

WPUQueueApc mengambil sebagai parameter input penunjuk ke struktur WSATHREADID (diberikan kepada penyedia melalui parameter input lpThreadId ), penunjuk ke fungsi APC yang akan dipanggil, dan nilai konteks 32-bit yang kemudian diteruskan ke fungsi APC. Karena hanya satu nilai konteks 32-bit yang tersedia, fungsi APC itu sendiri tidak dapat menjadi rutinitas penyelesaian yang ditentukan klien. Penyedia layanan harus menyediakan pointer ke fungsi APC sendiri yang menggunakan nilai konteks yang disediakan untuk mengakses informasi hasil yang diperlukan untuk operasi yang tumpang tindih, dan kemudian memanggil rutinitas penyelesaian yang ditentukan klien.

Prototipe untuk rutinitas penyelesaian yang disediakan klien adalah sebagai berikut:

);

CompletionRoutine adalah tempat penampung untuk fungsi yang disediakan klien. dwError menentukan status penyelesaian untuk operasi yang tumpang tindih seperti yang ditunjukkan oleh lpOverlapped. cbTransferred menentukan jumlah byte yang dikembalikan. Saat ini, tidak ada nilai bendera yang ditentukan dan dwFlags akan menjadi nol. Fungsi ini tidak mengembalikan nilai.

Mengembalikan dari fungsi ini memungkinkan pemanggilan rutinitas penyelesaian lain yang tertunda untuk soket ini. Rutinitas penyelesaian dapat dipanggil dalam urutan apa pun, meskipun tidak harus dalam urutan yang sama dengan operasi yang tumpang tindih selesai.

Kompatibilitas

Kode IOCTL dengan T == 0 adalah subset dari kode IOCTL yang digunakan dalam soket Berkeley. Secara khusus, tidak ada perintah yang setara dengan FIOASYNC.

Catatan

Semua I/O yang dimulai oleh utas tertentu dibatalkan ketika utas tersebut keluar. Untuk soket yang tumpang tindih, operasi asinkron yang tertunda dapat gagal jika utas ditutup sebelum operasi selesai. Lihat ExitThread untuk informasi selengkapnya.

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Header ws2spi.h

Lihat juga

WPUQueueApc

LPWSPGetSockopt

LPWSPSetSockOpt

LPWSPSocket