បញ្ជូនការបិទពាក់កណ្តាល TCP បន្ទាប់ពីសម្អាតបៃដែលកំពុងរង់ចាំ
ដោះស្រាយ EOF ក្នុងប្រូកស៊ី TCP ដោយមិនបាត់បង់ទិន្នន័យក្នុងជួរ និងមិនកាត់ចម្លើយនៅទិសផ្សេងទៀត។
អតិថិជនបញ្ចប់ការផ្ញើ ប្រូកស៊ីឃើញ EOF ហើយចម្លើយបាត់ទៅ។ ការបិទសុខៈទាំងពីររបស់ប្រូកស៊ីភ្លាមៗអាចបង្កឱ្យមានលំដាប់នោះច្បាស់។ នៅក្នុងរ៉េឡេ TCP ការបញ្ចប់ដោយមានរបៀបនៅទិសមួយមិនមានន័យថាទិសមួយទៀតបានបញ្ចប់ទេ។
សូមពិចារណាអតិថិជនដែលផ្ញើសំណើ បិទផ្នែកផ្ញើរបស់ខ្លួន ហើយរង់ចាំចម្លើយ៖
client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service
ប្រូកស៊ីមានការតភ្ជាប់ TCP ពីរ និងស្ទ្រីមបៃពីរដែលផ្លាស់ទីដោយឯករាជ្យ។ វាត្រូវបញ្ជូនសញ្ញាចុងបញ្ចប់នៃធាតុចូលបន្តទៅមុខ បន្ទាប់ពីបញ្ជូនបៃដែលមកមុនវា។
សម្អាតជួរមុនពេលបញ្ជូន EOF
ក្នុងការទទួលដែលមានទំហំមិនសូន្យលើស្ទ្រីម TCP ការត្រឡប់សូន្យបង្ហាញពីការបញ្ចប់ដោយមានរបៀបនៃស្ទ្រីមចូលនោះ។ សម្គាល់ទិសអាននោះថាបានបញ្ចប់។ ឈប់រង់ចាំធាតុចូលបន្ថែមពីវា ប៉ុន្តែរក្សាបៃដែលបានតម្រៀបរួចសម្រាប់សុខៈផ្ទុយ។
នៅពេលជួរពីអតិថិជនទៅសេវាត្រូវបានសម្អាត សូមហៅ shutdown(service_socket, SHUT_WR) លើសុខៈ POSIX។ វាបញ្ចប់ការបញ្ជូនបន្ថែមទៅសេវា ខណៈទិសពីសេវាទៅអតិថិជននៅតែមាន។ នៅពេលសេវាបញ្ចប់ចម្លើយរបស់វា សូមអនុវត្តប្រតិបត្តិការឆ្លុះបន្ទាប់ពីសម្អាតជួរចម្លើយ។
ការបិទឧបករណ៍បរិយាយគឺស្ថិតនៅចំណុចដែលទិសទាំងពីរ និងបូហ្វ័រកំពុងរង់ចាំរបស់ពួកវាបានបញ្ចប់ ឬកន្លែងដែលកំហុស ឬការបោះបង់តម្រូវឱ្យបញ្ចប់។ រក្សាពេលវេលាកំណត់មានដែនកំណត់សម្រាប់ដៃគូដែលមិនដែលបញ្ចប់ពាក់កណ្តាលដែលនៅសល់របស់វា។
ភាពរួចរាល់គឺជាការអញ្ជើញឱ្យអាន
សុខៈដែលអាចអានបានអាចមានទិន្នន័យ ឬស្ថានភាព EOF។ ហៅ recv ហើយបកស្រាយលទ្ធផលរបស់វា។ ចំនួនវិជ្ជមានគឺបៃត្រូវបញ្ជូន សូន្យគឺជាចុងបញ្ចប់នៃទិស។ លើសុខៈដែលមិនរារាំង EAGAIN ឬ EWOULDBLOCK មានន័យថាបច្ចុប្បន្នមិនមានធាតុចូលបន្ថែម ខណៈ EINTR អាចត្រូវការព្យាយាមម្តងទៀត។ ទាំងពីរមិនមែនជាព្រឹត្តិការណ៍ដូច EOF ទេ។
កុំស្វែងរកទង់ FIN ក្នុងបូហ្វ័របៃដែលត្រូវបានត្រឡប់មកវិញ។ TCP ផ្តល់ស្ទ្រីមបៃតាមលំដាប់ទៅ API នេះ ព្រំដែនកញ្ចប់ និងផ្នែក FIN មិនមែនជាទម្រង់ផ្ទុកកម្មវិធីធម្មតាទេ។
នេះជាវដ្តជីវិតនៃផ្លូវរូងក្រោមដីបៃឆៅ។ ប្រូកស៊ី HTTP ដែលញែកសារនៅតែត្រូវគោរពការធ្វើស៊ុម HTTP ហើយប្រូកស៊ីដែលបញ្ចប់ TLS ក៏មានពិធីការបិទ TLS ដែរ។ រក្សាការសម្រេចចិត្តពិធីការទាំងនោះពីលើរ៉េឡេ TCP តាមទិស។