Bagikan melalui


Fungsi WSAEnumNetworkEvents (winsock2.h)

Fungsi WSAEnumNetworkEvents menemukan kemunculan peristiwa jaringan untuk soket yang ditunjukkan, menghapus rekaman peristiwa jaringan internal, dan mengatur ulang objek peristiwa (opsional).

Sintaks

int WSAAPI WSAEnumNetworkEvents(
  [in]  SOCKET             s,
  [in]  WSAEVENT           hEventObject,
  [out] LPWSANETWORKEVENTS lpNetworkEvents
);

Parameter

[in] s

Deskriptor yang mengidentifikasi soket.

[in] hEventObject

Handel opsional yang mengidentifikasi objek peristiwa terkait yang akan direset.

[out] lpNetworkEvents

Penunjuk ke struktur WSANETWORKEVENTS yang diisi dengan catatan peristiwa jaringan yang terjadi dan kode kesalahan terkait.

Mengembalikan nilai

Nilai yang dikembalikan adalah nol jika operasi berhasil. Jika tidak, nilai SOCKET_ERROR dikembalikan, dan nomor 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.
WSAEINVAL
Salah satu parameter yang ditentukan tidak valid.
WSAEINPROGRESS
Panggilan Windows Sockets 1.1 yang diblokir sedang berlangsung, atau penyedia layanan masih memproses fungsi panggilan balik.
WSAENOTSOCK
Deskriptor bukan soket.
WSAEFAULT
Parameter lpNetworkEvents bukan bagian yang valid dari ruang alamat pengguna.

Keterangan

Fungsi WSAEnumNetworkEvents digunakan untuk menemukan peristiwa jaringan mana yang telah terjadi untuk soket yang ditunjukkan sejak pemanggilan terakhir fungsi ini. Ini dimaksudkan untuk digunakan bersama dengan WSAEventSelect, yang mengaitkan objek peristiwa dengan satu atau beberapa peristiwa jaringan. Perekaman peristiwa jaringan dimulai ketika WSAEventSelect dipanggil dengan parameter lNetworkEvents nonzero dan tetap berlaku sampai panggilan lain dilakukan ke WSAEventSelect dengan parameter lNetworkEvents diatur ke nol, atau sampai panggilan dilakukan ke WSAAsyncSelect.

WSAEnumNetworkEvents hanya melaporkan aktivitas jaringan dan kesalahan yang dicalonkan melalui WSAEventSelect. Lihat deskripsi pilih dan WSAAsyncSelect untuk mengetahui bagaimana fungsi tersebut melaporkan aktivitas dan kesalahan jaringan.

Catatan internal soket peristiwa jaringan disalin ke struktur yang direferensikan oleh lpNetworkEvents, setelah itu rekaman peristiwa jaringan internal dihapus. Jika parameter hEventObject bukan NULL, objek peristiwa yang ditunjukkan juga diatur ulang. Penyedia Windows Sockets menjamin bahwa operasi penyalinan rekaman peristiwa jaringan, membersihkannya dan mengatur ulang objek peristiwa terkait bersifat atomik, sehingga kejadian berikutnya dari peristiwa jaringan yang ditunjuk akan menyebabkan objek peristiwa diatur. Dalam kasus fungsi ini mengembalikan SOCKET_ERROR, objek peristiwa terkait tidak diatur ulang dan catatan peristiwa jaringan tidak dihapus.

Anggota lNetworkEvents dari struktur WSANETWORKEVENTS menunjukkan peristiwa jaringan FD_XXX mana yang telah terjadi. Array iErrorCode digunakan untuk berisi kode kesalahan terkait dengan indeks array yang sesuai dengan posisi bit peristiwa di lNetworkEvents. Pengidentifikasi seperti FD_READ_BIT dan FD_WRITE_BIT dapat digunakan untuk mengindeks array iErrorCode . Perhatikan bahwa hanya elemen array iErrorCode yang diatur yang sesuai dengan bit yang diatur dalam parameter lNetworkEvents . Parameter lain tidak dimodifikasi (ini penting untuk kompatibilitas mundur dengan aplikasi yang tidak mengetahui peristiwa FD_ROUTING_INTERFACE_CHANGE dan FD_ADDRESS_LIST_CHANGE baru).

Kode kesalahan berikut dapat dikembalikan bersama dengan peristiwa jaringan yang sesuai.

Peristiwa: FD_CONNECT

Kode kesalahan Makna
WSAEAFNOSUPPORT Alamat dalam keluarga yang ditentukan tidak dapat digunakan dengan soket ini.
WSAECONNREFUSED Upaya untuk terhubung ditolak secara paksa.
WSAENETUNREACH Jaringan tidak dapat dijangkau dari host ini saat ini.
WSAENOBUFS Tidak ada ruang buffer yang tersedia. Soket tidak dapat dihubungkan.
WSAETIMEDOUT Upaya untuk menyambungkan kehabisan waktu tanpa membuat koneksi
 

Peristiwa: FD_CLOSE

Kode kesalahan Makna
WSAENETDOWN Subsistem jaringan gagal.
WSAECONNRESET Koneksi direset oleh sisi jarak jauh.
WSAECONNABORTED Koneksi dihentikan karena waktu habis atau kegagalan lainnya.
 

Peristiwa: FD_ACCEPT

Peristiwa: FD_ADDRESS_LIST_CHANGE

Peristiwa: FD_GROUP_QOS

Peristiwa: FD_QOS

Peristiwa: FD_OOB

Peristiwa: FD_READ

Peristiwa: FD_WRITE

Kode kesalahan Makna
WSAENETDOWN Subsistem jaringan gagal.
 

Peristiwa: FD_ROUTING_INTERFACE_CHANGE

Kode kesalahan Makna
WSAENETUNREACH Tujuan yang ditentukan tidak lagi dapat dijangkau.
WSAENETDOWN Subsistem jaringan gagal.
 

Contoh Kode

Contoh berikut menunjukkan penggunaan fungsi WSAEnumNetworkEvents.
#ifndef UNICODE
#define UNICODE
#endif

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>

// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")

int main()
{
//-------------------------
// Declare and initialize variables
    WSADATA wsaData;
    int iResult;

    SOCKET SocketArray[WSA_MAXIMUM_WAIT_EVENTS], ListenSocket;
    WSAEVENT EventArray[WSA_MAXIMUM_WAIT_EVENTS];
    WSANETWORKEVENTS NetworkEvents;
    sockaddr_in InetAddr;
    DWORD EventTotal = 0;
    DWORD Index;
    DWORD i;
    
    HANDLE NewEvent = NULL; 

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        wprintf(L"WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

//-------------------------
// Create a listening socket
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ListenSocket == INVALID_SOCKET) {
        wprintf(L"socket function failed with error: %d\n", WSAGetLastError() );
        return 1;
    }
    
    InetAddr.sin_family = AF_INET;
    InetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    InetAddr.sin_port = htons(27015);

//-------------------------
// Bind the listening socket
    iResult = bind(ListenSocket, (SOCKADDR *) & InetAddr, sizeof (InetAddr));
    if (iResult != 0) {
        wprintf(L"bind failed with error: %d\n", WSAGetLastError() );
        return 1;
    }

//-------------------------
// Create a new event
    NewEvent = WSACreateEvent();
    if (NewEvent == NULL) {
        wprintf(L"WSACreateEvent failed with error: %d\n", GetLastError() );
        return 1;
    }    

//-------------------------
// Associate event types FD_ACCEPT and FD_CLOSE
// with the listening socket and NewEvent
    iResult = WSAEventSelect(ListenSocket, NewEvent, FD_ACCEPT | FD_CLOSE);
    if (iResult != 0) {
        wprintf(L"WSAEventSelect failed with error: %d\n", WSAGetLastError() );
        return 1;
    }

//-------------------------
// Start listening on the socket
    iResult = listen(ListenSocket, 10);
    if (iResult != 0) {
        wprintf(L"listen failed with error: %d\n", WSAGetLastError() );
        return 1;
    }

//-------------------------
// Add the socket and event to the arrays, increment number of events
    SocketArray[EventTotal] = ListenSocket;
    EventArray[EventTotal] = NewEvent;
    EventTotal++;

//-------------------------
// Wait for network events on all sockets
    Index = WSAWaitForMultipleEvents(EventTotal, EventArray, FALSE, WSA_INFINITE, FALSE);
    Index = Index - WSA_WAIT_EVENT_0;

//-------------------------
// Iterate through all events and enumerate
// if the wait does not fail.
    for (i = Index; i < EventTotal; i++) {
        Index = WSAWaitForMultipleEvents(1, &EventArray[i], TRUE, 1000, FALSE);
        if ((Index != WSA_WAIT_FAILED) && (Index != WSA_WAIT_TIMEOUT)) {
            WSAEnumNetworkEvents(SocketArray[i], EventArray[i], &NetworkEvents);
        }
    }

//...
    return 0;


Windows Phone 8: Fungsi ini didukung untuk aplikasi Windows Phone Store di Windows Phone 8 dan yang lebih baru.

Windows 8.1 dan Windows Server 2012 R2: Fungsi ini didukung untuk aplikasi Windows Store di Windows 8.1, Windows Server 2012 R2, dan yang lebih baru.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8.1, Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header winsock2.h
Pustaka Ws2_32.lib
DLL Ws2_32.dll

Lihat juga

WSAEventSelect

Fungsi Winsock

Referensi Winsock