Apakah soket tidak menyekat?
Apakah soket tidak menyekat?

Video: Apakah soket tidak menyekat?

Video: Apakah soket tidak menyekat?
Video: part 1: pembuatan rangka sekat ruangan 2024, Mungkin
Anonim

bukan - menyekat soket . Penyelesaian kepada masalah ini dipanggil " bukan - menyekat soket ". Secara lalai, TCP soket ada di dalam " menyekat " mod. Contohnya, apabila anda memanggil recv() untuk membaca daripada strim, kawalan tidak dikembalikan kepada program anda sehingga sekurang-kurangnya satu bait data dibaca dari tapak jauh.

Sehubungan itu, apakah itu soket menyekat dan tidak menyekat?

Dalam menyekat mod, recv, hantar, sambung (TCP sahaja) dan terima (TCP sahaja) soket Panggilan API akan blok selama-lamanya sehingga tindakan yang diminta telah dilakukan. Dalam bukan - menyekat mod, fungsi ini kembali serta-merta. pilih kehendak blok sehingga soket sudah bersedia.

Seseorang juga mungkin bertanya, adakah soket menyekat secara lalai? Oleh lalai , TCP soket diletakkan dalam a menyekat mod. Ini bermakna kawalan tidak dikembalikan kepada program anda sehingga beberapa operasi khusus selesai.

Mengenai ini, bagaimana anda membuat soket tidak menyekat?

Untuk menandakan a soket sebagai bukan - menyekat , kami menggunakan panggilan sistem fcntl. Berikut ialah contoh: int flags = guard(fcntl(socket_fd, F_GETFL), "could not get file flags"); pengawal(fcntl(soket_fd, F_SETFL, bendera | O_NONBLOCK), "tidak boleh ditetapkan bendera fail");

Apakah penyekatan soket?

A soket boleh masuk" mod menyekat " atau "tidak menyekat mod ." Fungsi soket dalam menyekat (atau segerak) mod jangan kembali sehingga mereka dapat menyelesaikan tindakan mereka. Ini dipanggil menyekat kerana ia soket yang fungsinya dipanggil tidak boleh melakukan apa-apa - disekat - sehingga panggilan kembali.

Disyorkan: