Bagikan melalui


Kode Kontrol SIO_LOOPBACK_FAST_PATH

Deskripsi

Kode kontrol SIO_LOOPBACK_FAST_PATH mengonfigurasi soket TCP untuk latensi yang lebih rendah dan operasi yang lebih cepat pada antarmuka loopback.

PentingSIO_LOOPBACK_FAST_PATH tidak digunakan lagi dan tidak disarankan untuk digunakan dalam kode Anda.

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

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

Parameter

s

Deskriptor yang mengidentifikasi soket.

dwIoControlCode

Kode kontrol untuk operasi. Gunakan SIO_LOOPBACK_FAST_PATH untuk operasi ini.

lpvInBuffer

Penunjuk ke buffer input. Parameter ini berisi pointer ke nilai Boolean yang menunjukkan apakah soket harus dikonfigurasi untuk operasi loopback cepat.

cbInBuffer

Ukuran, dalam byte, dari buffer input.

lpvOutBuffer

Penunjuk ke buffer output. Parameter ini tidak digunakan untuk operasi ini.

cbOutBuffer

Ukuran, dalam byte, dari buffer output. Parameter ini harus diatur ke nol.

lpcbBytesReturned

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

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

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

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

lpvOverlapped

Penunjuk ke struktur WSAOVERLAPPED .

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

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

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

lpCompletionRoutine

Jenis: LPWSAOVERLAPPED_COMPLETION_ROUTINE _In_opt_

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

lpThreadId

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

Catatan Parameter ini hanya berlaku untuk fungsi WSPIoctl .

lpErrno

Penunjuk ke kode kesalahan.

Catatan Parameter ini hanya berlaku untuk fungsi WSPIoctl .

Nilai kembali

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

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

Kode kesalahan Makna
WSA_IO_PENDING Operasi I/O yang tumpang tindih sedang berlangsung. Nilai ini dikembalikan jika operasi yang tumpang tindih berhasil dimulai dan penyelesaian akan ditunjukkan di lain waktu.
WSA_OPERATION_ABORTED Operasi I/O telah dibatalkan karena keluarnya utas atau permintaan aplikasi. Kesalahan ini dikembalikan jika operasi yang tumpang tindih dibatalkan karena penutupan soket atau eksekusi perintah SIO_FLUSH IOCTL .
WSAEACCES Upaya dilakukan untuk mengakses soket dengan cara yang dilarang oleh izin aksesnya. Kesalahan ini dikembalikan dalam beberapa kondisi untuk reservasi port persisten yang mencakup hal berikut: pengguna tidak memiliki hak istimewa administratif yang diperlukan di komputer lokal atau aplikasi tidak berjalan dalam shell yang ditingkatkan sebagai Administrator bawaan (RunAs administrator).
WSAEFAULT Sistem mendeteksi alamat penunjuk yang tidak valid dalam mencoba menggunakan argumen pointer dalam panggilan. Kesalahan ini dikembalikan dari parameter lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped atau lpCompletionRoutine tidak sepenuhnya terkandung dalam bagian ruang alamat pengguna yang valid.
WSAEINPROGRESS Operasi pemblokiran saat ini sedang dijalankan. Kesalahan ini dikembalikan jika fungsi dipanggil saat panggilan balik sedang berlangsung.
WSAEINTR Operasi pemblokiran terganggu oleh panggilan ke WSACancelBlockingCall. Kesalahan ini dikembalikan jika operasi pemblokiran terganggu.
WSAEINVAL Argumen yang tidak valid disediakan. Kesalahan ini dikembalikan jika parameter dwIoControlCode bukan perintah yang valid, atau parameter input yang ditentukan tidak dapat diterima, atau perintah tidak berlaku untuk jenis soket yang ditentukan.
WSAENETDOWN Operasi soket menemukan jaringan mati. Kesalahan ini dikembalikan jika subsistem jaringan gagal.
WSAENOTSOCK Operasi dicoba pada sesuatu yang bukan soket. Kesalahan ini dikembalikan jika deskriptor s bukan soket.
WSAEOPNOTSUPP Operasi yang dicoba tidak didukung untuk jenis objek yang direferensikan. Kesalahan ini dikembalikan jika perintah IOCTL yang ditentukan tidak didukung. Kesalahan ini juga dikembalikan jika SIO_LOOPBACK_FAST_PATH IOCTL tidak didukung oleh penyedia transportasi.

Keterangan

Aplikasi dapat menggunakan SIO_LOOPBACK_FAST_PATH IOCTL untuk mengurangi latensi dan meningkatkan performa operasi loopback pada soket TCP. 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.

Soket yang berencana untuk memulai permintaan koneksi harus menerapkan IOCTL ini sebelum membuat permintaan koneksi. Jadi soket yang digunakan oleh fungsi connect, ConnectEx, WSAConnect, WSAConnectByList, atau WSAConnectByName untuk memulai koneksi harus menerapkan IOCTL ini untuk menggunakan jalur cepat untuk operasi loopback.

Soket yang mendengarkan permintaan koneksi harus menerapkan IOCTL ini sebelum menerima koneksi. Jadi soket yang digunakan oleh fungsi dengar harus menerapkan IOCTL ini sehingga soket apa pun yang diterima akan menggunakan jalur cepat untuk loopback. Setiap soket yang dikembalikan oleh fungsi dengar dan diteruskan ke fungsi accept, AcceptEx, atau WSAAccept akan ditandai untuk menggunakan jalur cepat khusus untuk operasi loopback.

Setelah aplikasi menetapkan koneksi pada antarmuka loopback menggunakan jalur cepat, semua paket untuk masa pakai koneksi harus menggunakan jalur cepat.

Menerapkan SIO_LOOPBACK_FAST_PATH ke soket yang akan terhubung ke jalur non-loopback tidak akan berpengaruh.

Pengoptimalan loopback TCP ini menghasilkan paket yang mengalir melalui Lapisan Transportasi (TL) alih-alih loopback tradisional melalui Lapisan Jaringan. Pengoptimalan ini meningkatkan latensi untuk paket loopback. Setelah aplikasi memilih pengaturan tingkat koneksi untuk menggunakan jalur cepat loopback, semua paket akan mengikuti jalur loopback. Untuk komunikasi loopback, kemacetan dan penurunan paket tidak diharapkan. Gagasan kontrol kemacetan dan pengiriman yang andal dalam TCP tidak akan perlu. Namun, ini tidak berlaku untuk kontrol alur. Tanpa kontrol alur, pengirim dapat membanjiri buffer penerima, yang mengarah ke perilaku loopback TCP yang salah. Kontrol alur di jalur loopback yang dioptimalkan TCP dipertahankan dengan menempatkan permintaan kirim dalam antrean. Ketika buffer penerima penuh, tumpukan TCP/IP menjamin bahwa pengiriman tidak akan selesai sampai antrean dilayanakan mempertahankan kontrol alur.

Koneksi loopback jalur cepat TCP di hadapan callout Windows Filtering Platform (WFP) untuk data koneksi harus mengambil jalur lambat yang tidak dioptimalkan untuk loopback. Jadi filter WFP akan mencegah jalur cepat loopback baru ini digunakan. Ketika filter WFP diaktifkan, sistem yang akan kita gunakan jalur lambat bahkan jika SIO_LOOPBACK_FAST_PATH IOCTL diatur. Ini memastikan bahwa aplikasi mode pengguna memiliki kemampuan keamanan WFP penuh.

Secara default, SIO_LOOPBACK_FAST_PATH dinonaktifkan.

Hanya subset opsi soket TCP/IP yang didukung ketika SIO_LOOPBACK_FAST_PATH IOCTL digunakan untuk mengaktifkan jalur cepat loopback pada soket. Daftar opsi yang didukung meliputi yang berikut ini:

  • IP_TTL
  • IP_UNICAST_IF
  • IPV6_UNICAST_HOPS
  • IPV6_UNICAST_IF
  • IPV6_V6ONLY
  • SO_CONDITIONAL_ACCEPT
  • SO_EXCLUSIVEADDRUSE
  • SO_PORT_SCALABILITY
  • SO_RCVBUF
  • SO_REUSEADDR
  • TCP_BSDURGENT

Lihat juga

Opsi Soket IPPROTO_IP

Opsi Soket IPPROTO_IPV6

Opsi Soket IPPROTO_TCP

soket

Opsi Soket SOL_SOCKET

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW