.TH "ZSHTCPSYS" "1" "July 12, 2026" "zsh 5\&.9\&.2" .SH "نام (NAME)" zshtcpsys \- سامانه ارتباط TCP در zsh .\" Yodl file: Zsh/tcpsys.yo .SH "توضیحات (DESCRIPTION)" .PP ماژول \fBzsh/net/tcp\fP برای فراهم کردن ورودی/خروجی شبکه از طریق TCP/IP از درون پوسته ارائه شده است؛ توضیحات آن را در \fIzshmodules\fP(1)\& ببینید. این صفحه راهنما مجموعه‌ای از توابع مبتنی بر این ماژول را شرح می‌دهد\&. اگر ماژول نصب شده باشد، این توابع معمولاً به‌طور هم‌زمان نصب می‌شوند و در این صورت برای بارگذاری خودکار در مسیر جستجوی پیش‌فرض توابع در دسترس خواهند بود\&. علاوه بر ماژول \fBzsh/net/tcp\fP، ماژول \fBzsh/zselect\fP نیز برای پیاده‌سازی مهلت زمانی (timeout) روی عملیات خواندن به کار می‌رود\&. برای نکات عیب‌یابی، به توصیه‌های مربوط به توابع \fBzftp\fP شرح‌داده‌شده در \fIzshzftpsys\fP(1)\& مراجعه کنید\&. .PP توابعی متناظر با عملیات پایه ورودی/خروجی باز کردن، بستن، خواندن و ارسال وجود دارند که با نام‌های \fBtcp_open\fP و غیره شناخته می‌شوند؛ همچنین تابع \fBtcp_expect\fP برای تحلیل تطبیق الگو بر روی داده‌های خوانده‌شده به عنوان ورودی در دسترس است\&. این سامانه دریافت و ارسال داده‌ها را به‌طور هم‌زمان از و به چندین نشست (session) نام‌گذاری‌شده آسان می‌سازد\&. علاوه بر این، می‌تواند با ویرایشگر خط پوسته پیوند داده شود تا داده‌های ورودی به‌صورت خودکار در پایانه نمایش داده شوند\&. از دیگر امکانات موجود می‌توان به ثبت وقایع (logging)، پالایش (filtering) و خط اعلان‌های خروجی با قابلیت پیکربندی اشاره کرد\&. .PP برای استفاده از این سامانه در جاهایی که در دسترس است، کافی است دستور `\fBautoload \-U tcp_open\fP\&' را اجرا کرده و طبق مستندات زیر \fBtcp_open\fP را برای شروع یک نشست اجرا کنید\&. تابع \fBtcp_open\fP سایر توابع را به‌طور خودکار بارگذاری خواهد کرد\&. .PP .PP .SH "توابع کاربری TCP (TCP USER FUNCTIONS)" .PP .SS "ورودی/خروجی پایه (Basic I/O)" .PP .PD 0 .TP .PD 0 \fBtcp_open\fP [ \fB\-qz\fP ] \fIhost port\fP [ \fIsess\fP ] .TP .PD 0 \fBtcp_open\fP [ \fB\-qz\fP ] [ \fB\-s\fP \fIsess\fP | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] ] \&.\&.\&. .TP .PD \fBtcp_open\fP [ \fB\-qz\fP ] [ \fB\-a\fP \fIfd\fP | \fB\-f\fP \fIfd\fP ] [ \fIsess\fP ] یک نشست جدید باز می‌کند\&. در حالت اول و ساده‌ترین حالت، یک اتصال TCP به میزبان \fIhost\fP روی درگاه \fIport\fP باز می‌کند؛ قالب‌های عددی و نمادین برای هر دو پشتیبانی می‌شوند\&. .RS .PP اگر \fIsess\fP داده شود، این مقدار نام نشستی می‌شود که می‌تواند برای ارجاع به چندین اتصال TCP گوناگون استفاده شود\&. اگر \fIsess\fP داده نشود، تابع یک مقدار نام عددی ایجاد می‌کند (توجه داشته باشید که این مقدار با توصیف‌گر فایلی که نشست به آن متصل است \fIیکی نیست\fP)\&. توصیه می‌شود نام‌های نشست شامل نویسه‌های «عجیب» نباشند؛ نویسه‌های عجیب تعریف دقیقی ندارند اما مسلماً شامل حروف و اعداد یا خط زیرین (underscore) نبوده و قطعاً شامل نویسه‌های فاصله (whitespace) می‌شوند\&. .PP در حالت دوم، یک یا چند نشست که باید باز شوند با نام مشخص می‌شوند\&. یک نام نشست تکی پس از \fB\-s\fP و یک فهرست جداشده با کاما پس از \fB\-l\fP می‌آید؛ هر دو گزینه می‌توانند به تعداد دفعات مورد نیاز تکرار شوند\&. بروز خطا در باز کردن هر یک از نشست‌ها باعث توقف \fBtcp_open\fP می‌شود\&. میزبان و پورت از فایل \fB\&.ztcp_sessions\fP واقع در همان دایرکتوری فایل‌های راه‌اندازی zsh کاربر، یعنی معمولاً دایرکتوری خانه، و در صورت تنظیم بودن متغیر از \fB$ZDOTDIR\fP خوانده می‌شوند\&. این فایل شامل خطوطی است که هر کدام به ترتیب نام نشست و میزبان و پورت متناظر را با فاصله از یکدیگر مشخص می‌کنند (توجه داشته باشید که نام نشست در ابتدا می‌آید، نه در انتها)\&. .PP حالت سوم اتصالات TCP مجهول (passive) و ساختگی (fake) را ممکن می‌سازد\&. اگر گزینه \fB\-a\fP به کار رود، آرگومان آن یک توصیف‌گر فایل خواهد بود که برای گوش دادن به اتصالات باز شده است\&. هیچ تابع مستقیمی برای باز کردن چنین توصیف‌گر فایلی ارائه نشده است، اما فراخوانی `\fBztcp \-l\fP \fIport\fP\&' یکی ایجاد می‌کند که توصیف‌گر فایل آن در پارامتر \fB$REPLY\fP ذخیره می‌شود\&. پورت شنود را می‌توان با `\fBztcp \-c\fP \fIfd\fP\&' بست\&. فراخوانی `\fBtcp_open \-a\fP \fIfd\fP' تا زمانی که یک اتصال TCP دوردست به \fIport\fP روی ماشین محلی برقرار شود مسدود خواهد شد\&. در این نقطه، نشست به شیوه معمول ساخته می‌شود و تا حد زیادی از اتصال فعالی که با دو حالت اول ایجاد شده قابل تشخیص نیست\&. .PP اگر گزینه \fB\-f\fP استفاده شود، آرگومان آن یک توصیف‌گر فایل است که مستقیماً به گونه‌ای استفاده می‌شود که گویی یک نشست TCP است\&. اینکه بخش‌های دیگر سامانه توابع TCP تا چه حد با این شرایط سازگار باشند به این بستگی دارد که ماهیت اصلی آن توصیف‌گر فایل چیست\&. یک فایل معمولی احتمالاً غیرقابل‌استفاده خواهد بود؛ یک FIFO (لوله) به نوعی بهتر کار خواهد کرد، اما توجه داشته باشید که تلاش هم‌زمان دو نشست مختلف برای خواندن از یک FIFO مشترک ایده خوبی نیست\&. .PP اگر گزینه \fB\-q\fP به همراه هر یک از این سه حالت داده شود، \fBtcp_open\fP پیام‌های آگاهی‌رسانی را چاپ نخواهد کرد، اگرچه در هر حال با وضعیت مناسب خارج می‌شود\&. .PP اگر ویرایشگر خط (zle) در حال استفاده باشد، که معمولاً در پوسته‌های تعاملی همین‌طور است، \fBtcp_open\fP یک گرداننده (handler) درون zle نصب می‌کند که هم‌زمان با بررسی ورودی صفحه‌کلید، داده‌های جدید را نیز بررسی می‌کند\&. این ویژگی بسیار سودمند است زیرا پوسته در زمان انتظار هیچ زمان CPU مصرف نمی‌کند؛ این بررسی توسط سیستم‌عامل انجام می‌گیرد\&. دادن گزینه \fB\-z\fP به هر یک از حالت‌های \fBtcp_open\fP مانع از نصب این گرداننده می‌شود، بنابراین داده‌ها باید به‌طور صریح خوانده شوند\&. با این حال، توجه داشته باشید که این کار برای اجرای مجموعه‌های کاملی از دستورات ارسال و خواندن از درون یک تابع الزامی نیست، زیرا zle در آن هنگام فعال نیست\&. به‌طور کلی، این گرداننده تنها زمانی فعال است که پوسته در اعلان اعلان فرمان یا در دستور توکار \fBvared\fP منتظر ورودی باشد\&. این گزینه در صورتی که zle فعال نباشد هیچ تأثیری ندارد؛ دستور `\fB[[ \-o zle]]\fP\&' این مورد را بررسی خواهد کرد\&. .PP نخستین نشستی که باز شود تبدیل به نشست جاری می‌شود و فراخوانی‌های بعدی \fBtcp_open\fP آن را تغییر نمی‌دهند\&. نشست جاری در پارامتر \fB$TCP_SESS\fP ذخیره می‌شود؛ برای جزئیات بیشتر در مورد پارامترهای مورداستفاده این سامانه بخش‌های بعد را ببینید\&. .PP تابع \fBtcp_on_open\fP، در صورت تعریف شدن، هنگام باز شدن یک نشست فراخوانی می‌شود\&. توضیحات زیر را ببینید\&. .RE .TP \fBtcp_close\fP [ \fB\-qn\fP ] [ \fB\-a\fP | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] | \fIsess\fP \&.\&.\&. ] نشست‌های نام‌برده‌شده را می‌بندد، یا اگر هیچ موردی مشخص نشده باشد نشست جاری را، یا در صورت دادن گزینه \fB\-a\fP تمامی نشست‌های باز را می‌بندد\&. گزینه‌های \fB\-l\fP و \fB\-s\fP هر دو برای سازگاری با \fBtcp_open\fP پشتیبانی می‌شوند، هرچند گزینه دوم تکراری و زائد است\&. .RS .PP اگر نشستی که بسته می‌شود نشست جاری باشد، مقدار \fB$TCP_SESS\fP حذف می‌شود (unset)، به طوری که هیچ نشستی جاری نخواهد ماند، حتی اگر نشست‌های دیگری همچنان باز باشند\&. .PP اگر نشست با \fBtcp_open \-f\fP باز شده باشد، توصیف‌گر فایل تا زمانی که در بازه 0 تا 9 بوده و مستقیماً از خط فرمان قابل دسترس باشد، بسته می‌شود\&. اگر گزینه \fB\-n\fP داده شود، در این حالت هیچ تلاشی برای بستن توصیف‌گرهای فایل صورت نمی‌گیرد\&. گزینه \fB\-n\fP برای نشست‌های واقعی \fBztcp\fP استفاده نمی‌شود؛ توصیف‌گرهای فایل در آن‌ها همواره همراه با نشست بسته می‌شوند\&. .PP اگر گزینه \fB\-q\fP داده شود، هیچ پیام آگاهی‌رسانی چاپ نخواهد شد\&. .RE .TP .PD 0 \fBtcp_read \fP[ \fB\-bdq\fP ] [ \fB\-t\fP \fITO\fP ] [ \fB\-T\fP \fITO\fP ] .TP .PD \fB \fP[ \fB\-a\fP | \fB\-u\fP \fIfd\fP[\fB,\fP\&.\&.\&.] | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] | \fB\-s\fP \fIsess\fP \&.\&.\&. ] عملیات خواندن را روی نشست جاری، یا روی فهرستی از نشست‌ها اگر با \fB\-u\fP، \fB\-l\fP یا \fB\-s\fP مشخص شده باشند، یا روی تمامی نشست‌های باز در صورت ارائه گزینه \fB\-a\fP انجام می‌دهد\&. هر یک از گزینه‌های \fB\-u\fP، \fB\-l\fP یا \fB\-s\fP را می‌توان تکرار کرد یا با یکدیگر ترکیب نمود\&. گزینه \fB\-u\fP یک توصیف‌گر فایل را مستقیماً مشخص می‌کند (تنها مواردی که توسط این سامانه مدیریت می‌شوند مفید هستند)، و دو گزینه دیگر نشست‌ها را همان‌طور که برای \fBtcp_open\fP در بالا ذکر شد مشخص می‌کنند\&. .RS .PP این تابع وجود داده‌های جدید در تمامی نشست‌های فهرست‌شده را بررسی می‌کند\&. مگر اینکه گزینه \fB\-b\fP داده شده باشد، برای داده‌های جدید مسدود نخواهد شد (در حالت انتظار نخواهد ماند)\&. هر تک سطری از داده‌ها از هر یک از نشست‌های موجود خوانده شده، در پارامتر \fB$TCP_LINE\fP ذخیره می‌شود و در خروجی استاندارد نمایش داده می‌شود مگر آنکه \fB$TCP_SILENT\fP حاوی یک رشته غیرخالی باشد\&. هنگام چاپ در خروجی استاندارد، رشته \fB$TCP_PROMPT\fP در ابتدای سطر نشان داده خواهد شد؛ ساختار پیش‌فرض برای این مورد شامل نام نشستی است که در حال خوانده شدن است\&. برای اطلاعات بیشتر درباره این پارامترها به بخش‌های بعد مراجعه کنید\&. در این حالت، می‌توان \fBtcp_read\fP را مکرراً فراخوانی کرد تا زمانی که وضعیت 2 را برگرداند که نشان می‌دهد تمامی ورودی‌های معلق از همه نشست‌های مشخص‌شده پردازش شده‌اند\&. .PP با گزینه \fB\-b\fP، که معادل مهلت زمانی نامحدود است، تابع تا زمانی که سطری برای خواندن از یکی از نشست‌های مشخص‌شده در دسترس باشد مسدود می‌ماند\&. با این حال، تنها یک سطر بازگردانده می‌شود\&. .PP گزینه \fB\-d\fP مشخص می‌کند که تمام ورودی‌های معلق باید تخلیه شوند\&. در این حالت، \fBtcp_read\fP ممکن است چندین سطر را به روش بالا پردازش کند؛ تنها آخرین سطر در \fB$TCP_LINE\fP ذخیره می‌شود، اما مجموعه کامل در آرایه \fB$tcp_lines\fP نگهداری خواهد شد\&. این آرایه در شروع هر فراخوانی از \fBtcp_read\fP پاک می‌شود\&. .PP گزینه‌های \fB\-t\fP و \fB\-T\fP یک مهلت زمانی بر حسب ثانیه را مشخص می‌کنند، که برای دقت بیشتر می‌تواند یک عدد ممیز شناور باشد\&. با \fB\-t\fP این مهلت زمانی قبل از خواندن هر سطر اعمال می‌شود\&. با \fB\-T\fP، مهلت زمانی برای کل عملیات اعمال می‌گردد که در صورت وجود گزینه \fB\-d\fP می‌تواند شامل چندین عملیات خواندن باشد؛ بدون این گزینه، تفاوتی میان \fB\-t\fP و \fB\-T\fP وجود ندارد\&. .PP این تابع پیام‌های آگاهی‌رسانی چاپ نمی‌کند، اما اگر گزینه \fB\-q\fP داده شود، هیچ پیام خطایی برای یک نشست ناموجود چاپ نخواهد شد\&. .PP وضعیت بازگشتی 2 نشان‌دهنده پایان مهلت زمانی یا نبود داده برای خواندن است\&. هر وضعیت بازگشتی غیرصفر دیگری نشان‌دهنده شرایط بروز خطا است\&..PP برای چگونگی واپایش محل ارسال داده‌ها توسط \fBtcp_read\fP، به \fBtcp_log\fP مراجعه کنید\&. .RE .TP .PD 0 \fBtcp_send\fP [ \fB\-cnq\fP ] [ \fB\-s\fP \fIsess\fP | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] ] \fIdata\fP \&.\&.\&. .TP .PD \fBtcp_send\fP [ \fB\-cnq\fP ] \fB\-a\fP \fIdata\fP \&.\&.\&. رشته‌های داده ارائه‌شده را به نوبت به تمام نشست‌های مشخص‌شده ارسال می‌کند\&. عملیات زیرین تفاوت چندانی با یک `\fBprint \-r\fP\&' بر روی توصیف‌کننده فایل نشست ندارد، اگرچه تلاش می‌کند تا از بسته شدن پوسته به دلیل سیگنال \fBSIGPIPE\fP ناشی از تلاش برای نوشتن در یک نشست ازکارافتاده جلوگیری کند\&. .RS .PP گزینه \fB\-c\fP باعث می‌شود \fBtcp_send\fP مانند \fBcat\fP رفتار کند\&. این گزینه خطوط را از ورودی استاندارد تا پایان ورودی می‌خواند و آن‌ها را به نوبت به نشست(های) مشخص‌شده ارسال می‌کند، دقیقاً به گونه‌ای که گویی به عنوان آرگومان‌های \fIdata\fP به دستورهای جداگانه \fBtcp_send\fP داده شده‌اند\&. .PP گزینه \fB\-n\fP مانع از قرار دادن یک خط جدید (newline) توسط \fBtcp_send\fP در انتهای رشته‌های داده می‌شود\&. .PP بقیه گزینه‌ها همگی رفتاری مشابه \fBtcp_read\fP دارند\&. .PP آرگومان‌های داده پس از ارسال به \fBtcp_send\fP پردازش بیشتری نمی‌شوند؛ آن‌ها صرفاً به \fBprint \-r\fP منتقل می‌شوند\&. .PP اگر پارامتر \fB$TCP_OUTPUT\fP یک رشته غیرخالی باشد و ثبت وقایع فعال باشد، داده‌های ارسال‌شده به هر نشست در صورت لزوم با قرار گرفتن \fB$TCP_OUTPUT\fP در جلوی آن در فایل(های) گزارش منعکس می‌شوند، بسیار شبیه به شیوه \fB$TCP_PROMPT\fP\&. .RE .PP .SS "مدیریت نشست (Session Management)" .PP .PD 0 .TP .PD 0 \fBtcp_alias\fP [ \fB\-q\fP ] \fIalias\fP\fB=\fP\fIsess\fP \&.\&.\&. .TP .PD 0 \fBtcp_alias\fP [ \fB\-q\fP ] [ \fIalias\fP \&.\&.\&. ] .TP .PD \fBtcp_alias\fP \fB\-d\fP [ \fB\-q\fP ] \fIalias\fP \&.\&.\&. این تابع چندان خوب آزمایش نشده است\&. .RS .PP شکل نخست یک نام مستعار برای یک نام نشست ایجاد می‌کند؛ سپس می‌توان از \fIalias\fP برای اشاره به نشست موجود \fIsess\fP استفاده کرد\&. به تعداد مورد نیاز می‌توان نام‌های مستعار را فهرست کرد\&. .PP شکل دوم نام‌های مستعار مشخص‌شده را فهرست می‌کند، یا در صورت تعیین نشدن، تمام نام‌های مستعار را نمایش می‌دهد\&. .PP شکل سوم تمام نام‌های مستعار فهرست‌شده را حذف می‌کند\&. نشست‌های زیرین تحت تأثیر قرار نمی‌گیرند\&. .PP گزینه \fB\-q\fP زیرمجموعه‌ای ناهمگون از پیام‌های خطا را فرونشانی می‌کند\&. .RE .TP \fBtcp_log\fP [ \fB\-asc\fP ] [ \fB\-n\fP | \fB\-N\fP ] [ \fIlogfile\fP ] با یک آرگومان \fIlogfile\fP، تمام ورودی‌های آینده از \fBtcp_read\fP در فایل نام‌برده ثبت خواهند شد\&. مگر اینکه \fB\-a\fP (الحاق) داده شده باشد، این فایل ابتدا کوتاه شده (خالی) یا به صورت خالی ایجاد می‌شود\&. بدون آرگومان، وضعیت فعلی ثبت گزارش نمایش داده می‌شود\&. .RS .PP با گزینه \fB\-s\fP، ثبت وقایع به ازای هر نشست فعال می‌شود\&. ورودی از \fBtcp_read\fP به فایل \fIlogfile\fP\fB\&.\fP\fIsess\fP خروجی داده می‌شود\&. از آنجا که نشست به طور خودکار از طریق نام فایل تفکیک می‌شود، محتویات خام هستند (بدون \fB$TCP_PROMPT\fP)\&. گزینه \fB\-a\fP مانند بالا اعمال می‌شود\&. ثبت وقایع به ازای هر نشست و ثبت تمام داده‌ها در یک فایل با یکدیگر مانعة‌الجمع نیستند\&. .PP گزینه \fB\-c\fP تمام گزارش‌گیری‌ها، چه گزارش‌های کامل و چه گزارش‌های به ازای هر نشست را می‌بندد\&. .PP گزینه‌های \fB\-n\fP و \fB\-N\fP به ترتیب خروجی داده‌های خوانده‌شده توسط \fBtcp_read\fP به خروجی استاندارد را خاموش یا بازیابی می‌کنند؛ بنابراین `\fBtcp_log \-cn\fP\&' تمام خروجی‌های \fBtcp_read\fP را خاموش می‌کند\&. .PP این تابع صرفاً یک رابط ساده برای تنظیم پارامترهای \fB$TCP_LOG\fP، \fB$TCP_LOG_SESS\fP و \fB$TCP_SILENT\fP است که در زیر شرح داده شده‌اند\&. .RE .TP \fBtcp_rename\fP \fIold\fP \fInew\fP تغییر نام نشست \fIold\fP به نشست \fInew\fP\&. نام قدیمی نامعتبر می‌شود\&. .TP \fBtcp_sess\fP [ \fIsess\fP [ \fIcommand\fP [ \fIarg\fP \&.\&.\&. ] ] ] بدون آرگومان، تمام نشست‌های باز و توصیف‌کننده‌های فایل مرتبط را فهرست می‌کند\&. نشست جاری با یک ستاره علامت‌گذاری می‌شود\&. برای استفاده در توابع، دسترسی مستقیم به پارامترهای \fB$tcp_by_name\fP، \fB$tcp_by_fd\fP و \fB$TCP_SESS\fP احتمالاً راحت‌تر است؛ زیر را ببینید\&. .RS .PP با یک آرگومان \fIsess\fP، نشست جاری روی \fIsess\fP تنظیم می‌شود\&. این معادل تغییر مستقیم \fB$TCP_SESS\fP است\&. .PP با آرگومان‌های اضافی، هنگام اجرای `\fIcommand\fP \fIarg\fP \&.\&.\&.\&'، نشست جاری به طور موقت تنظیم می‌شود\&. \fIcommand\fP دوباره ارزیابی می‌شود تا نام‌های مستعار و غیره بسط یابند، اما بقیه \fIarg\fPها همان‌گونه که به \fBtcp_sess\fP داده شده‌اند منتقل می‌شوند\&. نشست اصلی هنگامی که \fBtcp_sess\fP خارج می‌شود بازگردانده می‌شود\&. .RE .PP.SS "ورودی/خروجی پیشرفته (Advanced I/O)" .PP .PD 0 .TP .PD \fBtcp_command\fP \fIsend\-option\fP \&.\&.\&. \fIsend\-argument\fP \&.\&.\&. این یک رابط کاربری مناسب برای \fBtcp_send\fP است\&. تمام آرگومان‌ها به \fBtcp_send\fP فرستاده می‌شوند، سپس تابع منتظر داده می‌ماند\&. تا زمانی که داده‌ها دست‌کم هر \fB$TCP_TIMEOUT\fP ثانیه یک‌بار (پیش‌فرض ۰\&.۳ ثانیه) می‌رسند، داده‌ها مطابق با تنظیمات فعلی مدیریت شده و چاپ می‌شوند\&. وضعیت ۰ همیشه بازگردانده می‌شود\&. .RS .PP این معمولاً تنها برای استفاده تعاملی مفید است، تا از تکه‌تکه شدن صفحه نمایش بر اثر خروجی‌های بازگشتی از اتصال جلوگیری شود\&. در داخل یک برنامه یا تابع، معمولاً بهتر است خواندن داده‌ها با یک روش صریح‌تر مدیریت شود\&. .RE .TP .PD 0 \fBtcp_expect \fP[ \fB\-q\fP ] [ \fB\-p\fP \fIvar\fP | \fB\-P\fP \fIvar\fP ] [ \fB\-t\fP \fITO\fP | \fB\-T\fP \fITO\fP ] .TP .PD \fB \fP[ \fB\-a\fP | \fB\-s\fP \fIsess\fP | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] ] \fIpattern\fP \&.\&.\&. منتظر ورودی تطبیق‌یافته با هر یک از \fIpattern\fPهای ارائه‌شده از هر یک از نشست‌های مشخص‌شده می‌ماند\&. ورودی تا زمانی که یک خط ورودی با یکی از الگوهای ارائه‌شده تطبیق یابد نادیده گرفته می‌شود؛ در این هنگام وضعیت صفر بازگردانده می‌شود، خط منطبق‌شده در \fB$TCP_LINE\fP ذخیره می‌گردد و مجموعه کامل خطوط خوانده‌شده در طول فراخوانی \fBtcp_expect\fP در آرایه \fB$tcp_expect_lines\fP ذخیره می‌شود\&. .RS .PP نشست‌ها به همان روش \fBtcp_read\fP مشخص می‌شوند: پیش‌فرض استفاده از نشست فعلی است، در غیر این صورت نشست‌های مشخص‌شده توسط \fB\-a\fP، \fB\-s\fP یا \fB\-l\fP استفاده می‌شوند\&. .PP هر \fIpattern\fP یک الگوی استاندارد extended\-globbing در zsh است؛ توجه داشته باشید که باید درون نقل‌قول قرار گیرد تا از بسط فوری آن توسط تولید نام فایل جلوگیری شود\&. الگو باید با کل خط مطابقت داشته باشد، بنابراین برای تطبیق یک زیررشته باید یک «\fB*\fP\&» در ابتدا و انتهای آن وجود داشته باشد\&. خطی که بررسی می‌شود شامل \fB$TCP_PROMPT\fP اضافه‌شده توسط \fBtcp_read\fP است\&. می‌توان پرچم‌های globbing نظیر «\fB#b\fP\&» یا «\fB#m\fP» را در الگوها گنجاند تا ارجاع‌های بازگشتی در پارامترهای \fB$MATCH\fP، \fB$match\fP و غیره، همان‌طور که در مستندات پایه zsh در مورد تطبیق الگو شرح داده شده، در دسترس قرار گیرند\&. .PP برخلاف \fBtcp_read\fP، رفتار پیش‌فرض \fBtcp_expect\fP این است که به‌طور نامحدود مسدود بماند تا ورودی مورد نظر یافت شود\&. این رفتار را می‌توان با تعیین مهلت زمانی با \fB\-t\fP یا \fB\-T\fP تغییر داد؛ این‌ها مشابه \fBtcp_read\fP عمل می‌کنند و به‌ترتیب مهلت زمانی به ازای هر خواندن یا مهلت زمانی کلی را برحسب ثانیه، به صورت یک عدد صحیح یا ممیز شناور مشخص می‌سازند\&. مانند \fBtcp_read\fP، در صورت اتمام مهلت زمانی، تابع وضعیت ۲ را بازمی‌گرداند\&. .PP تابع به محض مطابقت با هر یک از الگوهای ارائه‌شده بازمی‌گردد\&. اگر فراخواننده نیاز داشته باشد بداند کدام یک از الگوها تطبیق یافته است، می‌توان از گزینه \fB\-p\fP \fIvar\fP استفاده کرد؛ هنگام بازگشت، \fB$var\fP با استفاده از نمایه‌گذاری عادی zsh به شماره الگو تنظیم می‌شود، یعنی اولی ۱ است و به همین ترتیب\&. به عدم وجود «\fB$\fP\&» قبل از \fIvar\fP توجه کنید\&. برای جلوگیری از تداخل، نام پارامتر نمی‌تواند با «\fB_expect\fP\&» شروع شود\&. در صورت اتمام مهلت زمانی از نمایه \-۱ و در صورت عدم تطابق از ۰ استفاده می‌شود\&. .PP گزینه \fB\-P\fP \fIvar\fP عملکردی مشابه با \fB\-p\fP دارد، اما به جای نمایه‌های عددی، آرگومان‌های عادی باید با یک پیشوند و به دنبال آن دو نقطه (:) شروع شوند: سپس از آن پیشوند به عنوان یک برچسب استفاده می‌شود که در صورت تطابق آرگومان، \fIvar\fP به آن تنظیم می‌گردد\&. در صورت اتمام مهلت زمانی از برچسب \fBtimeout\fP و در صورت عدم تطابق از رشته خالی استفاده می‌شود\&. توجه داشته باشید که اگر نیازی به تفکیک تطابق‌ها نباشد، شروع آرگومان‌های مختلف با یک پیشوند یکسان مجاز است\&. .PP گزینه \fB\-q\fP مستقیماً به \fBtcp_read\fP ارسال می‌شود\&. .PP از آنجا که تمام ورودی‌ها از طریق \fBtcp_read\fP انجام می‌شوند، تمام قوانین معمول در مورد خروجی خطوط خوانده‌شده اعمال می‌گردند\&. یک استثنا این است که پارامتر \fB$tcp_lines\fP تنها خطی را منعکس می‌کند که واقعاً توسط \fBtcp_expect\fP تطبیق یافته است؛ برای دسترسی به مجموعه کامل خطوط خوانده‌شده در طول فراخوانی تابع، از \fB$tcp_expect_lines\fP استفاده کنید\&. .RE .TP \fBtcp_proxy\fP این یک تابع ساده برای پذیرش یک اتصال TCP و اجرای یک دستور با ورودی/خروجی تغییرمسیریافته به آن اتصال است\&. باید احتیاط شدیدی به کار بست زیرا هیچ‌گونه امنیتی وجود ندارد و این کار می‌تواند رایانه شما را به روی تمام دنیا باز بگذارد\&. در حالت ایده‌آل، این دستور فقط باید پشت یک فایروال استفاده شود\&. .RS .PP آرگومان اول، پورت TCP است که تابع روی آن گوش خواهد داد\&. .PP آرگومان‌های باقی‌مانده، یک دستور و آرگومان‌های آن را مشخص می‌کنند که باید با ورودی استاندارد، خروجی استاندارد و خطای استانداردِ تغییرمسیریافته به توصیف‌گر فایلی که نشست TCP روی آن پذیرفته شده است، اجرا شود\&. اگر دستوری داده نشود، یک zsh جدید راه‌اندازی می‌شود\&. این کار به همه افراد حاضر در شبکه شما دسترسی مستقیم به حسابتان می‌دهد، که در بسیاری از موارد اتفاق بدی خواهد بود\&. .PP دستور در پس‌زمینه اجرا می‌شود، بنابراین \fBtcp_proxy\fP می‌تواند اتصالات جدید را نیز بپذیرد\&. این تابع تا زمان متوقف شدن به پذیرش اتصالات جدید ادامه می‌دهد\&. .RE .TP \fBtcp_spam\fP [ \fB\-ertv\fP ] [ \fB\-a\fP | \fB\-s\fP \fIsess\fP | \fB\-l\fP \fIsess\fP[\fB,\fP\&.\&.\&.] ] \fIcmd\fP [ \fIarg\fP \&.\&.\&. ] دستور «\fIcmd\fP [ \fIarg\fP \&.\&.\&. ]\&» را به نوبت برای هر نشست اجرا می‌کند\&. توجه داشته باشید که این دستور، برنامه و آرگومان‌ها را اجرا می‌کند؛ خط فرمان را به عنوان داده ارسال نمی‌کند مگر اینکه گزینه \fB\-t\fP (ارسال) مشخص شده باشد\&. .RS .PP نشست‌ها می‌توانند به صورت صریح با گزینه‌های استاندارد \fB\-a\fP، \fB\-s\fP یا \fB\-l\fP انتخاب شوند، یا به صورت ضمنی تعیین گردند\&. اگر هیچ‌یک از این سه گزینه داده نشود، قوانین به این صورت هستند: اول، اگر آرایه \fB$tcp_spam_list\fP مقداردهی شده باشد، به عنوان فهرست نشست‌ها در نظر گرفته می‌شود، در غیر این صورت تمام نشست‌ها منظور می‌شوند\&. دوم، هر نشستی که در آرایه \fB$tcp_no_spam_list\fP آمده باشد از فهرست نشست‌ها حذف می‌گردد\&. .PP معمولاً هر نشستی که توسط پرچم «\fB\-a\fP\&» اضافه شده باشد یا زمانی که تمام نشست‌ها به صورت ضمنی انتخاب شده باشند، به ترتیب الفبایی پردازش می‌شوند؛ نشست‌هایی که توسط آرایه \fB$tcp_spam_list\fP یا در خط فرمان مشخص شده‌اند به همان ترتیبی که ارائه شده‌اند پردازش می‌گردند\&. پرچم \fB\-r\fP ترتیب حاصل را معکوس می‌کند\&. .PP پرچم \fB\-v\fP مشخص می‌کند که قبل از هر نشست یک \fB$TCP_PROMPT\fP چاپ شود\&. این خروجی پس از هرگونه تغییر در \fBTCP_SESS\fP توسط تابع تعریف‌شده توسط کاربر \fBtcp_on_spam\fP که در زیر توضیح داده شده است، چاپ می‌شود\&. (بدیهی است که آن تابع می‌تواند خروجی اختصاصی خود را تولید کند\&.) .PP اگر گزینه \fB\-e\fP وجود داشته باشد، خط ارائه‌شده به عنوان «\fIcmd\fP [ \fIarg\fP \&.\&.\&. ]\&» با استفاده از \fBeval\fP اجرا می‌شود، در غیر این صورت بدون پردازش اضافی اجرا خواهد شد\&. .RE .TP \fBtcp_talk\fP این تلاشی نسبتاً ساده برای هدایت مستقیم ورودی‌های ویرایشگر خط به \fBTCP_SESS\fP پیش‌فرض است\&. .RS .PP یک رشته گریز (escape string)، با متغیر \fB$TCP_TALK_ESCAPE\fP و مقدار پیش‌فرض «\fB:\fP\&»، برای دسترسی به عملکردهای عادی شل استفاده می‌شود\&. اگر این رشته به تنهایی در ابتدای خط قرار گیرد، یا فقط فاصله‌های خالی بعد از آن بیایند، ویرایشگر خط به عملکرد عادی برمی‌گردد\&. در غیر این صورت، آن رشته و فاصله‌های خالیِ پس از آن نادیده گرفته شده و باقی خط به عنوان ورودی شل، بدون تغییر وضعیت عملکرد ویرایشگر خط، اجرا می‌شود\&. .PP پیاده‌سازی فعلی از نظر استفاده از تاریخچه دستورها تا حدی ناقص است\&. به همین دلیل، بسیاری از کاربران ترجیح می‌دهند از روش‌های جایگزین برای ارسال آسان داده به نشست فعلی استفاده کنند\&. یک رویکرد ساده این است که یک نویسه خاص (مانند «\fB%\fP\&») را به «\fBtcp_command \-\fP\fB\-\fP\&» نام‌مستعار (alias) کنید\&. .RE .TP \fBtcp_wait\fP تنها آرگومان آن یک عدد صحیح یا ممیز شناور است که زمان تأخیر را برحسب ثانیه مشخص می‌کند\&. شل در طول این مدت هیچ کاری به جز انتظار برای ورودی در تمام نشست‌های TCP از طریق فراخوانی \fBtcp_read \-a\fP انجام نخواهد داد\&. این رفتار شبیه به رفتار تعاملی در خط فرمان هنگام نصب بودن کنترل‌کننده‌های zle است\&. .PP.SS "انتقال فایل «یک‌باره» (\`One\-shot\&' file transfer)" .PD 0 .TP .PD 0 \fBtcp_point\fP \fIport\fP .TP .PD \fBtcp_shoot\fP \fIhost\fP \fIport\fP این جفت تابع روش ساده‌ای را برای انتقال فایل میان دو میزبان از درون پوسته فراهم می‌کنند\&. با این حال، توجه داشته باشید که انتقال داده‌های حجیم در حال حاضر با استفاده از \fBcat\fP انجام می‌شود\&. \fBtcp_point\fP هر داده‌ای را که به \fIport\fP می‌رسد خوانده و به خروجی استاندارد ارسال می‌کند؛ \fBtcp_shoot\fP به \fIport\fP روی \fIhost\fP متصل شده و ورودی استاندارد خود را ارسال می‌نماید\&. هر \fIport\fP استفاده‌نشده‌ای می‌تواند به کار رود؛ سازوکار معمول برای انتخاب درگاه این است که یک عدد چهار رقمی تصادفی بالاتر از 1024 را در نظر بگیرید تا زمانی که یکی از آن‌ها کار کند\&. .RS .PP برای انتقال یک فایل از میزبان \fBwoodcock\fP به میزبان \fBspringes\fP، روی \fBspringes\fP: .PP .RS .nf \fBtcp_point 8091 >output_file\fP .fi .RE .PP و روی \fBwoodcock\fP: .PP .RS .nf \fBtcp_shoot springes 8091