Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah fungsi C++ mengendalikan acara rangkaian dalam pengaturcaraan rangkaian?
Kaedah menggunakan fungsi pilih() dalam C++ untuk mengendalikan acara rangkaian adalah seperti berikut: Gunakan fd_set untuk mengisytiharkan set deskriptor fail dan memulakannya untuk menetapkan tamat masa Gunakan fungsi pilih() untuk memantau peristiwa fail deskriptor. Semak nilai pulangan pilih(): -1 Menunjukkan ralat, 0 menunjukkan tamat masa, dan nilai positif menunjukkan bahawa peristiwa telah berlaku (seperti menerima data) berdasarkan kandungan koleksi deskriptor . .
Terdapat banyak cara untuk mengendalikan acara rangkaian dalam C++, yang paling biasa ialah menggunakan fungsi pilih(). Fungsi select() membenarkan atur cara memantau berbilang deskriptor fail (termasuk soket) dan menunggu peristiwa berlaku pada mana-mana satu daripadanya. Sintaks fungsi
select() adalah seperti berikut:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);di mana: nfds
: Bilangan maksimum deskriptor fail untuk dipantau.
readfds: Set deskriptor fail untuk dipantau untuk kebolehbacaan.
#include <sys/select.h> #include <cstdio> void handle_network_events(int sockfd) { fd_set readfds; FD_ZERO(&readfds); FD_SET(sockfd, &readfds); struct timeval timeout; timeout.tv_sec = 5; timeout.tv_usec = 0; int nfds = select(sockfd + 1, &readfds, NULL, NULL, &timeout); if (nfds == -1) { perror("select"); } else if (nfds == 0) { printf("Timeout!\n"); } else { if (FD_ISSET(sockfd, &readfds)) { // 处理来自 sockfd 的数据 char buffer[1024]; int nbytes = recv(sockfd, buffer, sizeof(buffer), 0); if (nbytes > 0) { printf("Received data: %s\n", buffer); } } } }Dalam contoh di atas, fungsi handle_network_events() menggunakan select () berfungsi untuk memantau data daripada peristiwa boleh dibaca sockfd. Jika data diterima dalam masa 5 saat, fungsi mencetak data yang diterima. Jika tidak, fungsi tamat masa dan mencetak mesej.
Atas ialah kandungan terperinci Bagaimanakah fungsi C++ mengendalikan acara rangkaian dalam pengaturcaraan rangkaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!