Kode Kontrol SIO_KEEPALIVE_VALS
Deskripsi
Kode kontrol SIO_KEEPALIVE_VALS memungkinkan atau menonaktifkan pengaturan per koneksi dari opsi TCP keep-alive yang menentukan batas waktu dan interval TCP keep-alive.
Untuk melakukan operasi ini, panggil fungsi WSAIoctl atau WSPIoctl dengan parameter berikut.
int WSAIoctl(
(socket) s, // descriptor identifying a socket
SIO_KEEPALIVE_VALS, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to tcp_keepalive struct
(DWORD) cbInBuffer, // length of input buffer
NULL, // output buffer
0, // 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_KEEPALIVE_VALS, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to tcp_keepalive struct
(DWORD) cbInBuffer, // length of input buffer
NULL, // output buffer
0, // 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_KEEPALIVE_VALS untuk operasi ini.
lpvInBuffer
Penunjuk ke buffer input. Parameter ini harus menunjuk ke struktur tcp_keepalive .
cbInBuffer
Ukuran, dalam byte, dari buffer input. Parameter ini harus sama dengan atau lebih besar dari ukuran struktur tcp_keepalive yang diacu oleh parameter lpvInBuffer .
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. Parameter yang dikembalikan ini menunjuk ke nilai DWORD nol untuk operasi ini, karena tidak ada output.
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 yang tumpang tindih berhasil dimulai dan penyelesaian akan ditunjukkan di lain waktu. |
WSA_OPERATION_ABORTED | Operasi yang tumpang tindih dibatalkan karena penutupan soket atau eksekusi perintah SIO_FLUSH IOCTL . |
WSAEFAULT | Parameter lpOverlapped atau lpCompletionRoutine tidak sepenuhnya terkandung dalam bagian ruang alamat pengguna yang valid. |
WSAEINPROGRESS | Fungsi ini dipanggil ketika panggilan balik sedang berlangsung. |
WSAEINTR | Operasi pemblokiran terganggu. |
WSAEINVAL | Parameter dwIoControlCode bukan perintah yang valid, atau parameter input tertentu tidak dapat diterima, atau perintah tidak berlaku untuk jenis soket yang ditentukan. |
WSAENETDOWN | Subsistem jaringan gagal. |
WSAENOPROTOOPT | Opsi soket tidak didukung pada protokol yang ditentukan. Kesalahan ini dikembalikan untuk soket datagram. |
WSAENOTSOCK | Deskriptor bukan soket. |
WSAEOPNOTSUPP | Perintah IOCTL yang ditentukan tidak didukung. Kesalahan ini dikembalikan jika SIO_KEEPALIVE_VALS IOCTL tidak didukung oleh penyedia transportasi. |
Keterangan
IOCTL SIO_KEEPALIVE_VALS didukung pada Windows 2000 dan versi yang lebih baru dari sistem operasi.
Kode kontrol SIO_KEEPALIVE_VALS memungkinkan atau menonaktifkan pengaturan per koneksi dari opsi keep-alive TCP yang menentukan batas waktu dan interval TCP keep-alive yang digunakan untuk paket 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.)
Parameter lpvInBuffer harus menunjuk ke struktur tcp_keepalive yang ditentukan dalam file header Mstcpip.h . Struktur ini didefinisikan sebagai berikut:
/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
u_long onoff;
u_long keepalivetime;
u_long keepaliveinterval;
};
Nilai yang ditentukan dalam anggota onoff menentukan apakah TCP tetap aktif atau dinonaktifkan. Jika anggota onoff diatur ke nilai bukan nol, TCP tetap aktif dan anggota lain dalam struktur digunakan. Anggota keepalivetime menentukan batas waktu, dalam milidetik, tanpa aktivitas hingga paket tetap aktif pertama dikirim. Anggota keepaliveinterval 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 aktif 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.
Nilai default di seluruh sistem dari batas waktu keep-alive dapat dikontrol melalui pengaturan registri KeepAliveTime yang mengambil nilai dalam milidetik. Jika kunci tidak diatur, batas waktu tetap hidup default adalah 2 jam. Nilai seluruh sistem default dari interval tetap hidup dapat dikontrol melalui pengaturan registri KeepAliveInterval yang mengambil nilai dalam milidetik. Jika kunci tidak diatur, interval tetap aktif default adalah 1 detik.
Pada Windows Vista dan yang lebih baru, jumlah pemeriksaan tetap hidup (transmisi ulang data) diatur ke 10 dan tidak dapat diubah.
Pada Windows Server 2003, Windows XP, dan Windows 2000, pengaturan default untuk jumlah pemeriksaan tetap aktif adalah 5. Jumlah pemeriksaan tetap hidup dapat dikontrol melalui pengaturan registri TcpMaxDataRetransmissions dan PPTPTcpMaxDataRetransmissions . Jumlah pemeriksaan tetap hidup diatur ke yang lebih besar dari dua nilai kunci registri. Jika angka ini adalah 0, maka pemeriksaan tetap hidup tidak akan dikirim. Jika angka ini di atas 255, maka angka ini disesuaikan menjadi 255.