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.

Nilai opsi soket

Konstanta yang mewakili opsi soket ini adalah 19.

Sintaks

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
);

Parameter

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 .

Menampilkan nilai

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
WSANOTINITIALISED
Panggilan WSAStartup yang berhasil harus terjadi sebelum menggunakan fungsi ini.
WSAENETDOWN
Subsistem jaringan gagal.
WSAEFAULT
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 .
WSAEINPROGRESS
Pemblokiran panggilan Windows Sockets 1.1 sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik.
WSAEINVAL
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.
WSAENOPROTOOPT
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.
WSAENOTSOCK
Deskriptor bukan soket.

 

Keterangan

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

Persyaratan Nilai
Klien minimum yang didukung
Windows XP [hanya aplikasi desktop]
Server minimum yang didukung
Windows Server 2003 [hanya aplikasi desktop]
Header
Ws2ipdef.h (termasuk Ws2tcpip.h)

Lihat juga

Soket Tumpukan Ganda

getsockopt

in_pktinfo

Opsi Soket IPPROTO_IP

IPV6_PKTINFO

setsockopt

soket

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)