Saya telah terbiasa exec 3<>/dev/tcp/192.168.0.101/6435
membuat koneksi TCP dengan 192.168.0.101:6435. Dan saya telah menerima serta mengirim beberapa pesan dengan pipe
perintah tersebut.
Sekarang, saya ingin mengakhiri koneksi TCP. Tapi, dengan ss -anpet
saya dapat melihat bahwa bash sendiri memegang koneksi ini, tanpa mengacaukan proses anak.
Saya mencoba mengirim sinyal 9 dan 15 ke proses bash, tetapi seperti yang Anda tahu, bash tidak dapat mematikan dirinya sendiri.
Jadi, dapatkah saya mengakhiri koneksi TCP yang telah saya buat tanpa mengakhiri pts yang saya gunakan (tidak membunuhnya dengan root atau mengirim Ctrl + D)?
bash
dengan shell itu?bash
tentu saja dapat membunuh dirinya sendiri - meskipun itu sebenarnya bukan yang ingin Anda lakukan di sini!pipe
perintah yang Anda gunakan dan yang tidak dapat saya temukan di sistem saya? Paket mana yangpipe
berasal? Apa (contoh) parameter yang dapat Anda berikan untuk mengirim / menerima data melalui/dev/tcp/...
koneksi? Terima kasih./dev/tcp
, bahkan tidak dapat menemukan/dev/tcp
dirinya sendiri. Tapi, sepertinya penggunaan khusus yang Anda dapat mengirim / menerima data denganpipe
dan jenis file ini. Dikatakan bahwa digunakan/dev/tcp/ip/port
untuk koneksi tcp, dan/dev/udp/ip/port
untuk paket udp. Karena bahasa Inggris saya tidak terlalu baik, saya tidak tahu bagaimana menjelaskannya dengan benar. Silakan mengedit pertanyaan dan mengirim jawaban.pipe
perintah yang Anda sebutkan. Saya melihathttps://github.com/clsr/sedbot/blob/master/sedbot.bash
. Tidak adapipe
perintah di sana. Ini mendefinisikan dua fungsi:readmsg
dan masing-masingsendmsg
untuk membaca / menulis dari / ke koneksi.readmsg
digunakanIFS= read -r -u 3 -t "$READ_TIMEOUT" line
untuk membaca dari file-deskriptor 3 ke dalam variabelline
, dansendmsg
digunakanecho "$(date +%s.%N) >>> $line" >&4
untuk menulis ke file deskriptor 4. Bagaimanapun, ini menjelaskan metode lengkap. The "pipe
perintah" menyebutkan masih tetap menjadi misteri bagi pembaca.Jawaban:
Perintah itu membuka koneksi pada deskriptor file 3. Jadi untuk menutup koneksi, Anda perlu menutup deskriptor file 3. Untuk melakukannya:
sumber
shutdown(3)
panggilan yang tepat , atau hanyaclose(2)
deskriptor file?close
, tetapishutdown
tidak lebih tepat dari dekat.shutdown
Satu-satunya penggunaan nyata adalah ketika Anda hanya ingin menutup satu sisi soket dupleks.shutdown
mengirimkan FIN, sedangkanclose
mengirimkan RST. Ini adalah hal-hal yang berbeda secara material.select()
, dan saya tidak percaya bash menyediakan untuk kedua opsi tersebut.