opsi soket IP_PKTINFO
Opsi soket IP_PKTINFO memungkinkan aplikasi untuk mengaktifkan atau menonaktifkan pengembalian informasi paket oleh fungsi LPFN_WSARECVMSG (WSARecvMsg) pada soket IPv4.
Untuk mengkueri status opsi soket ini, panggil fungsi getsockopt . Untuk mengatur opsi ini, panggil fungsi setsockopt dengan parameter berikut.
Konstanta yang mewakili opsi soket ini adalah 19.
int getsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // output buffer,
(int) optlen, // size of output buffer
);
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
-
s [in]
-
Deskriptor yang mengidentifikasi soket.
-
level [in]
-
Tingkat di mana opsi ditentukan. Gunakan IPPROTO_IP untuk operasi ini.
-
optname [in]
-
Opsi soket untuk mendapatkan atau mengatur nilai. Gunakan IP_PKTINFO untuk operasi ini.
-
optval [out]
-
Penunjuk ke buffer yang berisi nilai untuk opsi yang akan diatur. Parameter ini harus menunjuk ke buffer yang sama dengan atau lebih besar dari ukuran nilai DWORD .
Nilai ini diperlakukan sebagai nilai boolean dengan 0 digunakan untuk menunjukkan FALSE (dinonaktifkan) dan nilai bukan nol untuk menunjukkan TRUE (diaktifkan).
-
optlen [masuk, keluar]
-
Penunjuk ke ukuran, dalam byte, dari buffer optval . Ukuran ini harus sama dengan atau lebih besar dari ukuran nilai DWORD .
Jika operasi berhasil diselesaikan, fungsi getsockopt atau setsockopt mengembalikan nol.
Jika operasi gagal, nilai SOCKET_ERROR dikembalikan dan kode kesalahan tertentu dapat diambil dengan memanggil WSAGetLastError.
Kode kesalahan | Makna |
---|---|
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini. |
|
Subsistem jaringan gagal. |
|
Salah satu optval atau parameter optlen menunjuk ke memori yang tidak berada di bagian ruang alamat pengguna yang valid. Kesalahan ini juga dikembalikan jika nilai yang diacu oleh parameter optlen kurang dari ukuran nilai DWORD . |
|
Pemblokiran panggilan Windows Sockets 1.1 sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik. |
|
Argumen yang tidak valid disediakan. Kesalahan ini dikembalikan jika parameter tingkat tidak diketahui atau tidak valid. Pada Windows Vista dan yang lebih baru, kesalahan ini juga dikembalikan jika soket dalam keadaan transisi. |
|
Opsi tidak diketahui atau tidak didukung oleh keluarga protokol yang ditunjukkan. Kesalahan ini dikembalikan jika parameter jenis untuk deskriptor soket yang diteruskan dalam parameter s tidak SOCK_DGRAM atau SOCK_RAW. |
|
Deskriptor bukan soket. |
Fungsi getsockopt yang dipanggil dengan opsi soket IP_PKTINFO memungkinkan aplikasi untuk menentukan apakah informasi paket akan dikembalikan oleh fungsi LPFN_WSARECVMSG (WSARecvMsg)untuk soket IPv4.
Fungsi setsockopt yang dipanggil dengan opsi soket IP_PKTINFO memungkinkan aplikasi untuk mengaktifkan atau menonaktifkan pengembalian informasi paket oleh fungsi LPFN_WSARECVMSG (WSARecvMsg). Opsi IP_PKTINFO untuk soket dinonaktifkan (diatur ke FALSE) secara default.
Ketika opsi soket ini diaktifkan pada soket IPv4 jenis SOCK_DGRAM atau SOCK_RAW, fungsi LPFN_WSARECVMSG (WSARecvMsg) mengembalikan informasi paket dalam struktur WSAMSG yang ditunjukkan oleh parameter lpMsg . Salah satu objek data kontrol dalam struktur WSAMSG yang dikembalikan akan berisi struktur in_pktinfo yang digunakan untuk menyimpan informasi alamat paket yang diterima.
Untuk datagram yang diterima oleh fungsi LPFN_WSARECVMSG (WSARecvMsg) melalui IPv4, anggota kontrol struktur WSAMSG yang diterima akan berisi struktur WSABUF yang berisi struktur WSACMSGHDR . Anggota cmsg_level struktur WSACMSGHDR ini akan berisi IPPROTO_IP, anggota cmsg_type struktur ini akan berisi IP_PKTINFO, dan anggota cmsg_data akan berisi struktur in_pktinfo yang digunakan untuk menyimpan informasi alamat paket IPv4 yang diterima. Alamat IPv4 dalam struktur in_pktinfo adalah alamat IPv4 tempat paket diterima.
Untuk soket datagram tumpukan ganda, jika aplikasi memerlukan fungsi LPFN_WSARECVMSG (WSARecvMsg) untuk mengembalikan informasi paket dalam struktur WSAMSG untuk datagram yang diterima melalui IPv4, maka opsi soket IP_PKTINFO harus diatur ke true pada soket. Jika hanya opsi IPV6_PKTINFO yang diatur ke true pada soket, informasi paket akan diberikan untuk datagram yang diterima melalui IPv6 tetapi mungkin tidak disediakan untuk datagram yang diterima melalui IPv4.
Jika aplikasi mencoba mengatur opsi soket IP_PKTINFO pada soket datagram tumpukan ganda dan IPv4 dinonaktifkan pada sistem, maka fungsi setsockopt akan gagal dan WSAGetLastError akan kembali dengan kesalahan WSAEINVAL. Kesalahan yang sama ini juga dikembalikan oleh fungsi setsockopt sebagai akibat dari kesalahan lain. Jika aplikasi mencoba mengatur opsi soket tingkat IPPROTO_IP pada soket tumpukan ganda dan gagal dengan WSAEINVAL, maka aplikasi harus menentukan apakah IPv4 dinonaktifkan di komputer lokal. Salah satu metode yang dapat digunakan untuk mendeteksi apakah IPv4 diaktifkan atau dinonaktifkan adalah memanggil fungsi soket dengan parameter af yang diatur ke AF_INET untuk mencoba dan membuat soket IPv4. Jika fungsi soket gagal dan WSAGetLastError mengembalikan kesalahan WSAEAFNOSUPPORT, artinya IPv4 tidak diaktifkan. Dalam hal ini, kegagalan fungsi setsockopt saat mencoba mengatur opsi soket IP_PKTINFO dapat diabaikan oleh aplikasi. Jika tidak, kegagalan saat mencoba mengatur opsi soket IP_PKTINFO harus diperlakukan sebagai kesalahan yang tidak terduga.
Perhatikan bahwa file header Ws2ipdef.h secara otomatis disertakan dalam Ws2tcpip.h, dan tidak boleh digunakan secara langsung.
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
Header |
|