Winsock IOCTLs
Bagian ini menjelaskan kontrol input/output Winsock Sock Socket (IOCTLs) untuk berbagai edisi sistem operasi Windows. Gunakan fungsi WSAIoctl atau WSPIoctl untuk mengeluarkan Winsock IOCTL untuk mengontrol mode soket, protokol transportasi, atau subsistem komunikasi.
Beberapa IOCTL Winsock memerlukan lebih banyak penjelasan daripada yang dapat disampaikan tabel ini; opsi tersebut berisi tautan ke topik tambahan.
Dimungkinkan untuk mengadopsi skema pengodean yang mempertahankan opcode ioctlsocket yang saat ini ditentukan sambil menyediakan cara mudah untuk mempartisi ruang pengidentifikasi opcode di sebanyak parameter dwIoControlCode sekarang menjadi entitas 32-bit. 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.
I | O | V | T | Vendor/keluarga alamat | Kode |
---|---|---|---|---|---|
3 | 3 | 2 | 2 2 | 2 2 2 2 2 2 2 1 1 1 1 | 1 1 1 1 1 1 |
1 | 0 | 9 | 8 7 | 6 5 4 3 2 1 0 9 8 7 6 | 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
Catatan
Bit dalam parameter dwIoControlCode yang ditampilkan dalam tabel harus dibaca secara vertikal dari atas ke bawah menurut kolom. Jadi bit paling kiri adalah bit 31, bit berikutnya adalah bit 30, dan bit paling kanan adalah bit 0.
Saya diatur jika buffer input valid untuk kode, seperti halnya IOC_IN.
O diatur jika buffer output valid untuk kode, seperti halnya IOC_OUT. Kode kontrol menggunakan buffer input dan output mengatur I dan O.
V diatur jika tidak ada parameter untuk kode, seperti halnya IOC_VOID.
T adalah kuantitas 2-bit yang mendefinisikan jenis IOCTL. Nilai berikut didefinisikan:
0 IOCTL adalah kode IOCTL Unix standar, seperti halnya FIONREAD dan FIONBIO.
1 IOCTL adalah kode IOCTL Windows Sockets 2 generik. Kode IOCTL baru yang ditentukan untuk Windows Sockets 2 akan memiliki T == 1.
2 IOCTL hanya berlaku untuk keluarga alamat tertentu.
3 IOCTL hanya berlaku untuk penyedia vendor tertentu, seperti halnya IOC_VENDOR. Jenis ini memungkinkan perusahaan diberi nomor vendor yang muncul di parameter 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 Kuantitas 11-bit yang mendefinisikan vendor yang memiliki kode (jika T == 3) atau yang berisi keluarga alamat yang diterapkan kode (jika T == 2). Jika ini adalah kode Unix IOCTL (T == 0) maka parameter ini memiliki nilai yang sama dengan kode pada Unix. Jika ini adalah Windows Sockets 2 IOCTL generik (T == 1) maka parameter ini dapat digunakan sebagai ekstensi parameter kode untuk memberikan nilai kode tambahan.
Kode Kuantitas 16-bit yang berisi kode IOCTL tertentu untuk operasi.
Kode IOCTL Unix
Kode (perintah) IOCTL Unix berikut didukung.
FIONBIO
Aktifkan atau nonaktifkan mode non-pemblokiran pada soket. Parameter lpvInBuffer menunjuk pada panjang yang tidak ditandatangani (QoS), yang bukan nol jika mode non-pemblokiran akan diaktifkan dan nol jika akan dinonaktifkan. Ketika soket dibuat, soket beroperasi dalam mode pemblokiran (yaitu, mode non-pemblokiran dinonaktifkan). Ini konsisten dengan soket BSD.
Rutinitas WSAAsyncSelect atau WSAEventSelect secara otomatis mengatur soket ke mode non-pemblokiran. Jika WSAAsyncSelect atau WSAEventSelect telah dikeluarkan pada soket, maka setiap upaya untuk menggunakan WSAIoctl untuk mengatur soket kembali ke mode pemblokiran akan gagal dengan WSAEINVAL. Untuk mengatur soket kembali ke mode pemblokiran, aplikasi harus terlebih dahulu menonaktifkan WSAAsyncSelect dengan memanggil WSAAsyncSelect dengan parameter lEvent sama dengan nol, atau menonaktifkan WSAEventSelect dengan memanggil WSAEventSelect 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
Tentukan 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; aplikasi harus menggunakan operasi SIOCATMARK untuk menentukan apakah ada yang tersisa. Jika ada data normal yang mendahului data mendesak (di luar band), data tersebut akan diterima secara berurutan. (Perhatikan bahwa operasi recv tidak akan pernah mencampur OOB dan data normal dalam panggilan yang sama.) lpvOutBuffer menunjuk pada BOOL tempat WSAIoctl menyimpan hasilnya.
Perintah Windows Sockets 2
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: V, T==1)
Untuk menerima pemberitahuan perubahan dalam daftar alamat transportasi lokal dari keluarga protokol soket tempat aplikasi 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 aplikasi 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 non-pemblokiran dan tanpa parameter yang tumpang tindih (lpOverlapped/ lpCompletionRoutine diatur ke NULL), itu akan segera selesai dengan kesalahan WSAEWOULDBLOCK. Aplikasi kemudian dapat menunggu peristiwa perubahan daftar alamat melalui panggilan ke WSAEventSelect atau WSAAsyncSelect 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_APPLY_TRANSPORT_SETTING (pengaturan opcode: I, T==3)
Menerapkan pengaturan transportasi ke soket. Pengaturan transportasi yang diterapkan didasarkan pada TRANSPORT_SETTING_ID yang diteruskan dalam parameter lpvInBuffer .
Satu-satunya pengaturan transportasi yang saat ini ditentukan adalah untuk kemampuan REAL_TIME_NOTIFICATION_CAPABILITY pada soket TCP.
Jika TRANSPORT_SETTING_ID lulus 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.
Untuk informasi selengkapnya, lihat referensi SIO_APPLY_TRANSPORT_SETTING . SIO_APPLY_TRANSPORT_SETTING didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_ASSOCIATE_HANDLE (pengaturan opcode: I, T==1)
Kaitkan 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 dari antarmuka pendamping yang ditentukan, bersama dengan informasi lain yang diperlukan. Lihat bagian yang sesuai di Winsock Annexes untuk detail khusus untuk antarmuka pendamping tertentu. 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 (1) banyak kontrol tambahan atas perilaku soket dan (2) kontrol cukup spesifik penyedia sehingga mereka tidak memetakan ke fungsi Windows Socket yang ada atau yang mungkin didefinisikan di masa depan. Sebaiknya Model Objek Komponen (COM) digunakan alih-alih IOCTL ini untuk menemukan dan melacak antarmuka lain yang mungkin didukung oleh soket. IOCTL ini ada untuk kompatibilitas (terbalik) 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 untuknya akan dipilih dari reservasi port yang diidentifikasi oleh token yang diberikan. Jika tidak ada port yang tersedia dari reservasi yang ditentukan, panggilan fungsi ikatan 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 akan pernah mencegat IOCTL ini karena nilai yang dikembalikan harus menjadi 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 pada 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 penunjuk 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 penunjuk NULL , atau parameter lpOverlapped bukan pointer 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 pengirim antara penyiapan 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 dari Platform SDK.
SIO_CPU_AFFINITY (pengaturan opcode: I, T==3)
Mengaktifkan berbagi port dan menerima paralelisasi indikasi. Ketika aplikasi Anda menggunakan opsi soket ini untuk mengaitkan soket ke prosesor yang berbeda, dan kemudian mengikat soket ke alamat yang sama, indikasi terima akan didistribusikan di seluruh soket berdasarkan hash Receive Side Scaling (RSS). Pengaturan RSS tidak berubah, sehingga alur yang diberikan (titik akhir lokal, pasangan titik akhir jarak jauh) akan selalu ditunjukkan pada prosesor yang sama. Akibatnya, semua paket milik alur tertentu akan ditunjukkan ke soket yang sama. IOCTL ini harus dipanggil sebelum mengikat, jika tidak, WSAEINVAL akan dikembalikan. Buffer input adalah indeks prosesor (berbasis 0) dari jenis USHORT. IOCTL tidak kompatibel dengan SO_REUSEADDR dan SO_REUSE_MULTICASTPORT. Hanya didukung untuk soket UDP.
Catatan
Jika Anda menargetkan versi 10.0.19041.0 (Windows 10, versi 2004) dari Windows SDK, gunakan nilai 0x98000015
alih-alih nama SIO_CPU_AFFINITY.
SIO_ENABLE_CIRCULAR_QUEUEING (pengaturan opcode: V, T==1)
Menunjukkan kepada penyedia layanan berorientasi pesan yang mendasar bahwa pesan yang baru datang tidak boleh dihilangkan karena luapan antrean buffer. Sebaliknya, pesan terlama 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 dikeluarkan, 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 pengirim 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 sesuai untuk digunakan dengan sendto/ WSASendTo. IOCTL ini tidak didukung untuk soket IPv6 dan mengembalikan kode kesalahan WSAENOPROTOOPT .
SIO_GET_EXTENSION_FUNCTION_POINTER (pengaturan opcode: O, I, T==1)
Ambil penunjuk 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 dibuat 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 TCP/IP Windows 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, I, T==1)
Dicadangkan untuk digunakan di masa mendatang dengan soket.
Ambil struktur QOS yang terkait dengan grup soket tempat soket ini berada. Buffer input bersifat opsional. Beberapa protokol (misalnya, RSVP) memungkinkan buffer input digunakan untuk memenuhi syarat kualitas permintaan layanan. Struktur QOS akan disalin ke dalam buffer output. Jika soket ini bukan milik grup soket yang sesuai, anggota SendingFlowspec dan ReceivingFlowspec dari struktur QOS yang dikembalikan diatur ke NULL. Kode kesalahan WSAENOPROTOOPT ditunjukkan untuk penyedia layanan yang tidak mendukung kualitas layanan.
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 didukung pada Windows Me/98 dan Windows NT 4.0 dengan SP4 dan yang lebih baru.
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)
Dicadangkan untuk digunakan di masa mendatang dengan soket. Ambil struktur QOS yang terkait dengan soket. Buffer input bersifat opsional. Beberapa protokol (misalnya, RSVP) memungkinkan buffer input digunakan untuk memenuhi syarat kualitas permintaan layanan. 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.
Pengirim mungkin tidak memanggil SIO_GET_QOS hingga soket tersambung.
Penerima dapat memanggil SIO_GET_QOS segera setelah terikat.
SIO_GET_TX_TIMESTAMP
Soket IOCTL digunakan untuk mendapatkan tanda waktu untuk paket yang ditransmisikan (TX). Hanya berlaku untuk soket datagram.
Kode kontrol SIO_GET_TX_TIMESTAMP menghapus tanda waktu pengiriman dari antrean tanda waktu pengiriman soket. Aktifkan penerimaan tanda waktu terlebih dahulu dengan menggunakan soket SIO_TIMESTAMPING IOCTL. Kemudian ambil tanda waktu tx dengan ID dengan memanggil fungsi WSAIoctl (atau WSPIoctl) dengan parameter berikut.
Untuk SIO_GET_TX_TIMESTAMP, input adalah ID tanda waktu UINT32 , dan outputnya adalah nilai tanda waktu UINT64 . Jika berhasil, tanda waktu tx tersedia, dan dikembalikan. Jika tidak ada tanda waktu pengiriman yang tersedia, maka WSAGetLastError mengembalikan WSAEWOULDBLOCK.
Catatan
Tanda waktu TX tidak didukung saat melakukan pengiriman bersamaan melalui UDP_SEND_MSG_SIZE.
Lihat juga tanda waktu Winsock.
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 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. (Sumber daya ini mungkin hanya tersedia dalam bahasa Inggris.)
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 keep-alive 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_LOOPBACK_FAST_PATH (pengaturan opcode: I, T==3)
Mengonfigurasi soket TCP untuk latensi yang lebih rendah dan operasi yang lebih cepat pada antarmuka loopback. IOCTL ini meminta agar tumpukan TCP/IP menggunakan jalur cepat khusus untuk operasi loopback pada soket ini. IOCTL SIO_LOOPBACK_FAST_PATH hanya dapat digunakan dengan soket TCP. IOCTL ini harus digunakan di kedua sisi sesi loopback. Jalur cepat loopback TCP didukung menggunakan antarmuka loopback IPv4 atau IPv6. Secara default, SIO_LOOPBACK_FAST_PATH dinonaktifkan.
Untuk informasi selengkapnya, lihat referensi SIO_LOOPBACK_FAST_PATH . SIO_LOOPBACK_FAST_PATH didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_MULTIPOINT_LOOPBACK (pengaturan opcode: V, 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 dikirim 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 satu (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. Secara default, cakupan adalah 1.
SIO_QUERY_RSS_PROCESSOR_INFO (pengaturan opcode: O, T==1)
Mengkueri hubungan antara soket dan inti prosesor RSS dan simpul NUMA.
IOCTL SIO_QUERY_RSS_PROCESSOR_INFO mengembalikan struktur SOCKET_PROCESSOR_AFFINITY yang berisi PROCESSOR_NUMBER dan ID simpul NUMA. Struktur PROCESSOR_NUMBER yang dikembalikan berisi nomor grup dan nomor prosesor relatif dalam grup.
Untuk informasi selengkapnya, lihat referensi SIO_QUERY_RSS_PROCESSOR_INFO . SIO_QUERY_RSS_PROCESSOR_INFO didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_QUERY_RSS_SCALABILITY_INFO (pengaturan opcode: O, T==3)
Kueri antarmuka offload untuk kemampuan receive-side scaling (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:
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
Nilai yang dikembalikan di 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. Penskala 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_TRANSPORT_SETTING (pengaturan opcode: I, T==3)
Mengkueri pengaturan transportasi pada soket. Pengaturan transportasi yang sedang dikueri didasarkan pada TRANSPORT_SETTING_ID yang diteruskan dalam parameter lpvInBuffer .
Satu-satunya pengaturan transportasi yang saat ini ditentukan adalah untuk kemampuan REAL_TIME_NOTIFICATION_CAPABILITY pada soket TCP.
Jika TRANSPORT_SETTING_ID memiliki anggota Guid yang diatur ke REAL_TIME_NOTIFICATION_CAPABILITY, maka ini adalah permintaan untuk mengkueri pengaturan pemberitahuan real time untuk soket TCP yang digunakan dengan ControlChannelTrigger untuk menerima pemberitahuan jaringan latar belakang di aplikasi Windows Store. Jika panggilan WSAIoctl atau WSPIoctl berhasil, IOCTL ini mengembalikan struktur REAL_TIME_NOTIFICATION_SETTING_OUTPUT dengan status saat ini.
Untuk informasi selengkapnya, lihat referensi SIO_QUERY_TRANSPORT_SETTING . SIO_QUERY_TRANSPORT_SETTING didukung pada Windows 8, Windows Server 2012, 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. Pada Windows Vista, WFP berfokus pada skenario di mana komputer host adalah titik akhir komunikasi. Pada Windows Server 2008 , namun, ada implementasi firewall tepi yang ingin memanfaatkan platform WFP untuk memeriksa dan mem-proxy 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 ke 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 pointerNULL , 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_WFP_CONNECTION_REDIRECT_CONTEXT (pengaturan opcode: I, T==3)
Mengkueri konteks pengalihan untuk rekaman pengalihan yang digunakan oleh layanan pengalihan Windows Filtering Platform (WFP).
IOCTL SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT digunakan untuk menyediakan pelacakan koneksi yang diproksi pada koneksi soket yang dialihkan. Fitur WFP ini memfasilitasi pelacakan rekaman pengalihan dari pengalihan awal koneksi ke koneksi akhir ke tujuan.
Untuk informasi selengkapnya, lihat referensi SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT . SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (pengaturan opcode: I, T==3)
Mengkueri rekaman pengalihan untuk koneksi TCP/IP yang diterima untuk digunakan oleh layanan pengalihan Windows Filtering Platform (WFP).
IOCTL SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS digunakan untuk menyediakan pelacakan koneksi yang diproksi pada koneksi soket yang dialihkan. Fitur WFP ini memfasilitasi pelacakan rekaman pengalihan dari pengalihan awal koneksi ke koneksi akhir ke tujuan.
Untuk informasi selengkapnya, lihat referensi SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS . SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_RCVALL (pengaturan opcode: I, T==3)
Memungkinkan soket untuk menerima semua paket IPv4 atau IPv6 yang melewati throuigh 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 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 keluar dari antarmuka jaringan juga diambil. 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 di 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, sehingga 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_RCVALL_IGMPMCAST (pengaturan opcode: I, T==3)
Memungkinkan soket untuk menerima semua lalu lintas IP multicast IGMP di jaringan, tanpa menerima lalu lintas IP multicast lainnya. Handel soket yang diteruskan ke fungsi WSAIoctl harus dari keluarga alamat AF_INET, jenis soket SOCK_RAW, dan protokol IPPROTO_IGMP. Soket juga harus terikat ke antarmuka lokal eksplisit, yang berarti Anda tidak dapat mengikat INADDR_ANY.
Setelah soket terikat dan set IOCTL, panggilan ke fungsi WSARecv atau recv mengembalikan datagram IP multicast yang melewati antarmuka yang diberikan. Perhatikan bahwa Anda harus menyediakan buffer yang cukup besar. Menyetel IOCTL ini memerlukan hak istimewa Administrator pada komputer lokal.
SIO_RCVALL_IGMPMCAST didukung pada Windows 2000 dan yang lebih baru.
SIO_RCVALL_MCAST (pengaturan opcode: I, T==3)
Memungkinkan soket untuk menerima semua lalu lintas IP multicast di jaringan (yaitu, semua paket IP yang ditujukan untuk alamat IP dalam rentang 224.0.0.0 hingga 239.255.255.255). Handel soket yang diteruskan ke fungsi WSAIoctl harus dari keluarga alamat AF_INET, jenis soket SOCK_RAW, dan protokol IPPROTO_UDP. Soket juga harus mengikat antarmuka lokal eksplisit, yang berarti Anda tidak dapat mengikat INADDR_ANY. Soket harus mengikat ke port nol.
Setelah soket terikat dan set IOCTL, panggilan ke fungsi WSARecv atau recv mengembalikan datagram IP multicast yang melewati antarmuka yang diberikan. Perhatikan bahwa Anda harus menyediakan buffer yang cukup besar. Menyetel IOCTL ini memerlukan hak istimewa Administrator pada komputer lokal.
SIO_RCVALL_MCAST 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 diatur ke NULL), itu akan selesai segera kembali dan WSAEWOULDBLOCK sebagai kesalahan, dan aplikasi kemudian dapat menunggu perutean peristiwa perubahan melalui panggilan ke WSAEventSelect atau WSAAsyncSelect 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:
- Aplikasi dapat menentukan alamat kartubebas khusus keluarga protokol (sama dengan yang digunakan dalam panggilan ikat saat meminta untuk mengikat ke alamat yang tersedia) untuk meminta pemberitahuan tentang perubahan perutean apa pun. Ini memungkinkan aplikasi 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 memiliki opsi untuk mengabaikan informasi yang ditentukan oleh aplikasi dalam buffer input SIO_ROUTING_INTERFACE_CHANGE (seolah-olah aplikasi menentukan alamat kartubebas) dan menyelesaikan peristiwa SIO_ROUTING_INTERFACE_CHANGE IOCTL atau sinyal FD_ROUTING_INTERFACE_CHANGE 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, aplikasi tidak dapat mengandalkan informasi yang dikembalikan oleh SIO_ROUTING_INTERFACE_QUERY untuk terus-menerus. Aplikasi dapat mendaftar untuk pemberitahuan perubahan perutean melalui 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 aplikasi 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 penerapan 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 ini dan WSAGetLastError mengembalikan WSAEFAULT. Ukuran buffer output yang diperlukan akan dikembalikan dalam lpcbBytesReturned dalam kasus ini. Perhatikan 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 penanganan perilakunya 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:
/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
ULONG TargetOsVersion;
} 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, penyetelan otomatis jendela terima 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 penerima 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_PRIORITY_HINT (pengaturan opcode: I, T==3)
Memberikan petunjuk tentang protokol transportasi yang mendasar untuk memperlakukan lalu lintas pada soket ini dengan prioritas tertentu. lpvInBuffer harus menunjuk ke variabel jenis PRIORITY_HINT dengan cbInBuffer diatur ke sizeof(PRIORITY_HINT). Parameter lpvOutBuffer dan cbOutBuffer masing-masing harus NULL dan 0. Implementasi TCP Microsoft Windows mendukung IOCTL ini dimulai dengan Windows 10, versi 1809 (10.0; Build 17763) dan yang lebih baru sebagai berikut: ketika nilai prioritas yang diminta diatur ke IoPriorityHintVeryLow, TCP menggunakan versi algoritma LEDBAT yang dimodifikasi (ditentukan dalam RFC 6817) untuk mengontrol laju lalu lintas keluar pada soket. Lalu lintas masuk tidak terpengaruh oleh IOCTL ini. LEDBAT adalah algoritma pemulung, dan tujuannya adalah untuk menjaga latensi tetap rendah dan mencegah efek buruk pada lalu lintas prioritas normal dengan keluar dari jalan ketika lalu lintas prioritas normal ada.
Lihat juga RFC 6817.
SIO_SET_PRIORITY_HINT didukung pada Windows 10, versi 1809 (10.0; Bangun 17763) dan yang lebih baru.
SIO_SET_QOS (pengaturan opcode: I, T==1)
Kaitkan struktur QOS yang ditentukan 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_TCP_INITIAL_RTO (pengaturan opcode: I, T==3)
Mengontrol karakteristik transmisi ulang awal (SYN/SYN+ACK) dari soket TCP dengan mengonfigurasi parameter batas waktu transmisi ulang awal (RTO). Parameter konfigurasi ditentukan dalam struktur TCP_INITIAL_RTO_PARAMETERS .
Untuk informasi selengkapnya, lihat referensi SIO_TCP_INITIAL_RTO . SIO_TCP_INITIAL_RTO didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_TIMESTAMPING
Soket IOCTL yang digunakan untuk mengonfigurasi penerimaan tanda waktu transmisi/penerimaan soket. Hanya berlaku untuk soket datagram. Jenis input untuk SIO_TIMESTAMPING adalah struktur TIMESTAMPING_CONFIG .
Lihat juga tanda waktu Winsock.
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 Winsock Annexes untuk detail khusus untuk antarmuka pendamping tertentu. 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.
Sebaiknya 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_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.
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (pengaturan opcode: I, T==3)
Mengatur catatan pengalihan ke soket TCP baru yang digunakan untuk menyambungkan ke tujuan akhir untuk digunakan oleh layanan pengalihan Windows Filtering Platform (WFP).
IOCTL SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS digunakan sebagai bagian dari pelacakan koneksi yang diproksi pada koneksi soket yang dialihkan. Fitur WFP ini memfasilitasi pelacakan rekaman pengalihan dari pengalihan awal koneksi ke koneksi akhir ke tujuan.
Untuk informasi selengkapnya, lihat referensi SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS . SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS didukung pada Windows 8, Windows Server 2012, dan yang lebih baru.
SIO_TCP_INFO (pengaturan opcode: I, O, T==3)
Mengambil statistik TCP untuk soket. Statistik TCP disediakan dalam struktur TCP_INFO_v0 .
Tidak seperti mengambil statistik TCP dengan fungsi GetPerTcpConnectionEStats , mengambil statistik TCP dengan kode kontrol ini tidak mengharuskan kode pengguna memuat, menyimpan, dan memfilter tabel koneksi TCP, dan tidak memerlukan hak istimewa yang ditinggikan untuk digunakan.
Untuk informasi selengkapnya, lihat SIO_TCP_INFO. SIO_TCP_INFO didukung pada Windows 10, versi 1703, Windows Server 2016, dan yang lebih baru.
Keterangan
Winsock Ioctls didefinisikan dalam sejumlah file header yang berbeda. Ini termasuk file header Winsock2.h, Mswsock.h, dan Mstcpip.h .
Pada Microsoft Windows Software Development Kit (SDK) yang dirilis untuk Windows Vista dan yang lebih baru, organisasi file header telah berubah dan sejumlah Winsock Ioctls juga didefinisikan dalam file header Ws2def.h, Ws2ipdef.h, dan Mswsockdef.h . File header Ws2def.h secara otomatis disertakan oleh file header Winsock2.h . File header Ws2ipdef.h secara otomatis disertakan oleh file header Ws2tcpip.h . File header Mswsockdef.h secara otomatis disertakan dalam file header Mswsockdef.h .
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|