فایلهای
واحد سوکت
ممکن است
شامل
بخشهای [Unit] و
[Install] باشند که
در systemd.unit(5)
توصیف
شدهاند.
فایلهای
واحد سوکت
باید شامل
بخش [Socket] باشند
که حامل
اطلاعات
مربوط به
سوکت یا FIFO
تحت نظارت
آن است.
تعدادی از
گزینههایی
که ممکن است
در این بخش
استفاده
شوند با
انواع
واحدهای
دیگر مشترک
هستند. این
گزینهها
در systemd.exec(5)، systemd.kill(5)
و systemd.resource-control(5)
مستند
شدهاند.
گزینههای
مخصوص بخش [Socket]
واحدهای
سوکت به شرح
زیر است:
ListenStream=, ListenDatagram=,
ListenSequentialPacket=
آدرسی را
برای گوش
دادن
بهترتیب
برای یک
سوکت
جریانی (
SOCK_STREAM)،
دیتاگرام
(
SOCK_DGRAM)، یا
بستهای
متوالی (
SOCK_SEQPACKET)
مشخص
میکند.
آدرس را
میتوان در
قالبهای
گوناگونی
نوشت:
اگر آدرس
با یک ممیز
("/") شروع
شود، به
عنوان یک
سوکت سیستم
فایل در
خانواده
سوکت AF_UNIX
خوانده
میشود.
اگر آدرس
با علامت
اتساین ("@")
شروع شود،
به عنوان یک
سوکت در
فضاینام
انتزاعی در
خانواده AF_UNIX
خوانده
میشود.
علامت "@"
پیش از
مقیدسازی
با یک نویسه
NUL جایگزین
میشود.
برای
جزئیات، unix(7)
را ببینید.
اگر رشته
آدرس یک عدد
منفرد
باشد، به
عنوان
شماره
درگاهی
برای گوش
دادن از
طریق IPv6
خوانده
میشود.
بسته به
مقدار BindIPv6Only=
(به زیر
مراجعه
کنید) این
ممکن است
منجر به در
دسترس بودن
سرویس از
طریق هر دو IPv6
و IPv4 (پیشفرض)
یا فقط از
طریق IPv6 شود.
اگر رشته
آدرس
رشتهای با
قالب "v.w.x.y:z"
باشد، به
عنوان آدرس
IPv4 با مقدار
v.w.x.y و درگاه z
تفسیر
میشود.
اگر رشته
آدرس
رشتهای با
قالب "[x]:y"
باشد، به
عنوان آدرس
IPv6 با مقدار x
و درگاه y
تفسیر
میشود. یک
دامنه رابط
اختیاری
(نام رابط یا
شماره آن) را
میتوان پس
از یک نماد
"%" مشخص کرد:
"[x]:y%dev".
دامنههای
رابط فقط با
آدرسهای
محلی پیوند
مفید
هستند،
زیرا هسته
در سایر
موارد
آنها را
نادیده
میگیرد.
توجه داشته
باشید که
اگر آدرسی
به عنوان IPv6
مشخص شود،
ممکن است
همچنان
بسته به
تنظیم BindIPv6Only=
(به زیر
مراجعه
کنید) سرویس
را از طریق IPv4
نیز در
دسترس قرار
دهد.
اگر رشته
آدرس
رشتهای با
قالب "vsock:x:y"
باشد، به
عنوان CID
برابر با x
روی آدرس
درگاه y در
خانواده AF_VSOCK
خوانده
میشود.
شناسه CID یک
شناسه عدد
صحیح ۳۲
بیتی
منحصربهفرد
در AF_VSOCK مشابه
با آدرس IP
است. مشخص
کردن CID
اختیاری
است و
میتواند
روی رشته
خالی تنظیم
شود. "vsock" را
میتوان با
"vsock-stream"، "vsock-dgram" یا
"vsock-seqpacket"
جایگزین
کرد تا
استفاده از
نوع سوکت
متناظر
اجباری
شود.
توجه
داشته
باشید که
SOCK_SEQPACKET (یعنی
ListenSequentialPacket=) تنها
برای
سوکتهای
AF_UNIX در دسترس
است. SOCK_STREAM
(یعنی ListenStream=)
هنگامی که
برای
سوکتهای IP
استفاده
میشود به
سوکتهای TCP
و SOCK_DGRAM (یعنی
ListenDatagram=) به UDP
اشاره
دارد.
این
گزینهها
ممکن است
بیش از
یکبار
مشخص شوند،
که در این
صورت
ترافیک
ورودی روی
هر یک از
سوکتها
فعالسازی
سرویس را
راهاندازی
میکند و
تمام
سوکتهای
فهرستشده
به سرویس
منتقل
میشوند،
صرفنظر از
اینکه روی
آنها
ترافیک
ورودی وجود
داشته باشد
یا نه. اگر
رشته خالی
به هر یک از
این
گزینهها
اختصاص
یابد،
فهرست
آدرسها
برای گوش
دادن
بازنشانی
میشود و
تمام
استفادههای
قبلی از هر
یک از این
گزینهها
بیاثر
خواهد شد.
همچنین
هنگام
استفاده از
Service=، داشتن
بیش از یک
واحد سوکت
برای یک
سرویس
امکانپذیر
است، و
سرویس تمام
سوکتهای
پیکربندیشده
در تمام
واحدهای
سوکت را
دریافت
خواهد کرد.
سوکتهای
پیکربندیشده
در یک واحد
به ترتیب
پیکربندی
منتقل
میشوند،
اما هیچ
ترتیبی بین
واحدهای
سوکت مشخص
نشده است.
اگر در
اینجا از یک
آدرس IP
استفاده
شود، اغلب
مطلوب است
که پیش از
بالا آمدن و
آماده به
کار شدن
رابطی که
روی آن
پیکربندی
شده است، و
حتی
صرفنظر از
اینکه آیا
در هر
نقطهای
بالا خواهد
آمد یا خیر،
روی آن گوش
داده شود.
برای
مواجهه با
این موضوع،
توصیه
میشود
گزینه FreeBind= که
در زیر
توضیح داده
شده تنظیم
شود.
ListenFIFO=
یک FIFO
سیستم فایل
(برای
جزئیات به
fifo(7) مراجعه
کنید) را
برای گوش
دادن مشخص
میکند. این
گزینه یک
مسیر مطلق
سیستم فایل
را به عنوان
آرگومان
انتظار
دارد. رفتار
آن در غیر
این صورت
بسیار شبیه
به دستور
ListenDatagram= در بالا
است.
ListenSpecial=
یک فایل
ویژه در
سیستم فایل
را برای گوش
دادن مشخص
میکند. این
گزینه یک
مسیر مطلق
سیستم فایل
را به عنوان
آرگومان
انتظار
دارد. رفتار
آن در غیر
این صورت
بسیار شبیه
به دستور ListenFIFO=
در بالا است.
از این
گزینه برای
باز کردن
گرههای
دستگاه
نویسهای و
همچنین
فایلهای
ویژه در /proc/ و /sys/
استفاده
کنید.
ListenNetlink=
یک
خانواده Netlink
را برای
ایجاد سوکت
جهت گوش
دادن مشخص
میکند. این
گزینه یک
رشته کوتاه
اشارهکننده
به نام
خانواده AF_NETLINK
(مانند audit یا
kobject-uevent) را به
عنوان
آرگومان
انتظار
دارد، که
اختیاری
میتواند
با یک فضای
خالی و به
دنبال آن یک
عدد صحیح
گروه
چندپخشی
پسوند یابد.
رفتار آن در
غیر این
صورت بسیار
شبیه به
دستور ListenDatagram=
در بالا
است.
ListenMessageQueue=
نام یک
صف پیام POSIX را
برای گوش
دادن مشخص
میکند
(برای
جزئیات به
mq_overview(7) مراجعه
کنید). این
گزینه یک
نام معتبر
صف پیام
(یعنی
شروعشونده
با "/") را
انتظار
دارد. رفتار
آن در غیر
این صورت
بسیار شبیه
به دستور
ListenFIFO=
در بالا است.
در لینوکس
توصیفکنندههای
صف پیام در
واقع
توصیفکنندههای
فایل هستند
و
میتوانند
بین
فرآیندها
به ارث
برسند.
ListenUSBFunction=
مکان
نقاط
پایانی
USB FunctionFS[1]
را برای گوش
دادن، جهت
پیادهسازی
عملکردهای
گجت USB مشخص
میکند. این
گزینه یک
مسیر مطلق
سیستم فایل
از یک نقطه
سوار کردن FunctionFS
را به عنوان
آرگومان
انتظار
دارد. رفتار
آن در غیر
این صورت
بسیار شبیه
به دستور
ListenFIFO=
در بالا است.
از این
گزینه برای
باز کردن
نقطه
پایانی FunctionFS با
نام ep0
استفاده
کنید. هنگام
استفاده از
این گزینه،
سرویس
فعالشده
باید
گزینههای
USBFunctionDescriptors= و
USBFunctionStrings=
را تنظیم
کرده باشد.
در نسخه
۲۲۷ اضافه
شد.
SocketProtocol=
یکی از
مقادیر
udplite،
sctp یا
mptcp را
میپذیرد.
سوکت
بهترتیب
از پروتکل UDP-Lite
(
IPPROTO_UDPLITE)،
پروتکل SCTP (
IPPROTO_SCTP)
یا پروتکل MPTCP
(
IPPROTO_MPTCP)
استفاده
خواهد کرد.
در نسخه
۲۲۹ اضافه
شد.
BindIPv6Only=
یکی از
مقادیر
default،
both یا
ipv6-only را
میپذیرد.
گزینه سوکت
IPV6_V6ONLY را کنترل
میکند
(برای
جزئیات به
ipv6(7) مراجعه
کنید). اگر
روی
both باشد،
سوکتهای IPv6
مقیدشده از
طریق هر دو IPv4
و IPv6 قابل
دسترسی
خواهند بود.
اگر روی
ipv6-only
باشد،
آنها تنها
از طریق IPv6
قابل
دسترسی
خواهند بود.
اگر روی
default
باشد (که
پیشفرض
است،
شگفتا!)، از
تنظیم
پیشفرض
سراسری
سیستم
استفاده
میشود،
همانطور
که توسط
/proc/sys/net/ipv6/bindv6only کنترل
میشود، که
آن هم به
نوبه خود
بهطور
پیشفرض
معادل
both
است.
Backlog=
یک
آرگومان
عدد صحیح ۳۲
بیتی بدون
علامت
میپذیرد.
تعداد
اتصالاتی
را که هنوز
پذیرفته
نشدهاند و
در صف قرار
میگیرند
مشخص
میکند. این
تنظیم تنها
برای
سوکتهای
جریانی و
بستهای
متوالی
اهمیت دارد.
برای
جزئیات به
listen(2) مراجعه
کنید. مقدار
پیشفرض 4294967295
است. توجه
داشته
باشید که
این مقدار
بهطور
ضمنی توسط sysctl
با نام "net.core.somaxconn"
محدود
میشود، که
معمولاً
مقدار
پیشفرض 4096
دارد،
بنابراین
معمولاً
این مقدار sysctl
است که در
عمل اهمیت
دارد.
BindToDevice=
نام یک
رابط شبکه
را برای
مقید کردن
این سوکت به
آن مشخص
میکند. در
صورت
تنظیم،
ترافیک
تنها از
رابطهای
شبکه
مشخصشده
پذیرفته
خواهد شد.
این گزینه
سوکت
SO_BINDTODEVICE را
کنترل
میکند
(برای
جزئیات به
socket(7) مراجعه
کنید). اگر از
این گزینه
استفاده
شود، یک
وابستگی
ضمنی از این
واحد سوکت
نسبت به
واحد
دستگاه
رابط شبکه
ایجاد
میشود (به
systemd.device(5) مراجعه
کنید). توجه
داشته
باشید که
تنظیم این
پارامتر
ممکن است
منجر به
اضافه شدن
وابستگیهای
اضافی به
واحد شود (به
بالا
مراجعه
کنید).
SocketUser=, SocketGroup=
نام یک
کاربر/گروه
یونیکس را
میپذیرد.
در صورت
تعیین،
مالکیت
تمام
سوکتهای
AF_UNIX،
گرههای FIFO و
صفهای
پیام متعلق
به کاربر و
گروه
مشخصشده
خواهد بود.
اگر تنظیم
نشود
(پیشفرض)،
گرهها
متعلق به
کاربر/گروه root
خواهند بود
(اگر در
زمینه
سیستمی
اجرا شود) یا
متعلق به
کاربر/گروه
فراخواننده
(اگر در
زمینه
کاربری
اجرا شود).
اگر فقط یک
کاربر مشخص
شود اما هیچ
گروهی مشخص
نشود،
آنگاه گروه
از گروه
پیشفرض
کاربر مشتق
میشود.
در نسخه
۲۱۴ اضافه
شد.
SocketMode=
در صورت
گوش دادن
روی یک سوکت
سیستم
فایل، FIFO یا
صف پیام،
این گزینه
حالت
دسترسی به
سیستم فایل
را که هنگام
ایجاد گره
فایل
استفاده
میشود
مشخص
میکند. یک
حالت
دسترسی را
در
نمادگذاری
هشتهشتی
میپذیرد.
مقدار
پیشفرض 0666
است.
DirectoryMode=
در صورت
گوش دادن
روی یک سوکت
سیستم فایل
یا FIFO،
دایرکتوریهای
والد در
صورت نیاز
بهطور
خودکار
ایجاد
میشوند.
این گزینه
حالت
دسترسی
سیستم فایل
را که هنگام
ایجاد این
دایرکتوریها
استفاده
میشود
مشخص
میکند. یک
حالت
دسترسی را
در
نمادگذاری
هشتهشتی
میپذیرد.
مقدار
پیشفرض 0755
است.
Accept=
یک
آرگومان
بولی
میپذیرد.
اگر yes باشد،
برای هر
اتصال
ورودی یک
نمونه
سرویس
ایجاد
میشود و
تنها سوکت
اتصال به آن
منتقل
میگردد.
اگر no باشد،
تمام
سوکتهای
شنونده خود
به واحد
سرویس
راهاندازیشده
منتقل
میشوند و
تنها یک
واحد سرویس
برای تمام
اتصالات
ایجاد
میشود
(همچنین به
بالا
مراجعه
کنید). این
مقدار برای
سوکتهای
دیتاگرام و
FIFOها که در
آنها یک
واحد سرویس
منفرد بدون
قید و شرط
تمام
ترافیک
ورودی را
مدیریت
میکند
نادیده
گرفته
میشود.
مقدار
پیشفرض
no
است.
معمولاً،
برای
سرویسهای
حساس به
عملکرد،
انتخاب Accept=no
ترجیح داده
میشود،
زیرا به این
ترتیب تنها
اتصال اول
باید هزینه
منابع
فعالسازی
را بپردازد.
از سوی
دیگر، برای
سرویسهایی
که به ندرت
استفاده
میشوند Accept=yes
میتواند
ارجح باشد
زیرا
پیادهسازی
را ساده
میکند
(زیرا کد
برنامه
سرویس تنها
باید یک
اتصال
منفرد را به
جای مدیریت
چندین
اتصال
پردازش کند)
و امنیت
قویتری را
فراهم
میسازد
(زیرا
میتوان از
گزینههای
گوناگون
سندباکس
برای
جداسازی
اتصالات
موازی از
یکدیگر
استفاده
کرد، چرا که
هر یک توسط
یک نمونه
سرویس و
فرآیند
جداگانه
سرویسدهی
میشوند).
سرویسی که
روی یک سوکت
AF_UNIX گوش
میدهد
میتواند،
اما نیازی
ندارد که،
پیش از خروج
تابع close(2) را
روی سوکت
دریافتشده
فراخوانی
کند. با این
حال، نباید
پیوند سوکت
را از سیستم
فایل لغو
کند. نباید
shutdown(2) را روی
سوکتهایی
که با Accept=no
دریافت
کرده است
فراخوانی
کند، اما
میتواند
این کار را
برای
سوکتهایی
که با تنظیم
Accept=yes دریافت
کرده انجام
دهد.
تنظیم Accept=yes
بهویژه
برای اجازه
دادن به
دیمنهایی
که برای
استفاده با
inetd(8) طراحی
شدهاند تا
بدون تغییر
با
فعالسازی
سوکت systemd کار
کنند بسیار
مفید است.
توجه
داشته
باشید که
بسته به این
تنظیم،
سرویسهای
فعالشده
توسط
واحدهای
این نوع یا
سرویسهای
عادی هستند
(در صورت Accept=no)
یا
نمونههایی
از
سرویسهای
الگودار (در
صورت Accept=yes).
برای بحث
دقیقتر
درباره
قوانین
نامگذاری
سرویسهای
راهاندازیشده،
بخش
توضیحات را
در بالا
ببینید.
برای
اتصالات IPv4 و
IPv6، متغیر
محیطی $REMOTE_ADDR
شامل آدرس IP
راه دور
خواهد بود و
$REMOTE_PORT شامل
شماره
درگاه راه
دور خواهد
بود. این دو
متغیر
متناظر با
متغیرهای
تعریفشده
توسط واسط CGI
برای
سرویسهای
وب هستند (به
RFC 3875[2] مراجعه
کنید).
برای
اتصالات
سوکت AF_UNIX،
متغیر
محیطی $REMOTE_ADDR
یا شامل
مسیر سیستم
فایل سوکت
راه دور که
با یک ممیز
("/") شروع
میشود
خواهد بود
یا شامل
آدرس آن در
فضاینام
انتزاعی که
با علامت
اتساین ("@")
شروع
میشود. اگر
سوکت بدون
نام باشد،
$REMOTE_ADDR تنظیم
نخواهد شد.
اگر Accept=yes
استفاده
شود،
فرآیند
سرویس
فعالشده
متغیر
محیطی $SO_COOKIE را
برابر با
کوکی سوکت
لینوکس،
قالببندیشده
به صورت یک
عدد صحیح
دهدهی،
تنظیم
خواهد کرد.
کوکی سوکت
در غیر این
صورت
میتواند
از طریق getsockopt(7)
به دست آید.
توصیه
میشود
CollectMode=inactive-or-failed را
برای
نمونههای
سرویس
فعالشده
از طریق Accept=yes
تنظیم کنید
تا اطمینان
حاصل شود که
سرویسهای
اتصال
ناموفق
پاکسازی
شده و از
حافظه آزاد
میشوند و
انباشته
نمیگردند.
Writable=
یک
آرگومان
بولی
میپذیرد.
فقط
میتواند
در ترکیب با
ListenSpecial= استفاده
شود. اگر true
باشد، فایل
ویژه
مشخصشده
در حالت
خواندن-نوشتن
باز
میشود؛
اگر false باشد،
در حالت
فقطخواندنی
باز میشود.
مقدار
پیشفرض false
است.
در نسخه
۲۲۷ اضافه
شد.
FlushPending=
یک
آرگومان
بولی
میپذیرد.
فقط زمانی
میتواند
استفاده
شود که
Accept=no
باشد. اگر yes
باشد،
بافرهای
سوکت پس از
خروج سرویس
راهاندازیشده
پاک
میشوند.
این کار
باعث
میشود
هرگونه
داده معلق
پاک شود و
هرگونه
اتصال
ورودی معلق
رد گردد. اگر no
باشد،
بافرهای
سوکت پاک
نخواهند شد
و به سرویس
اجازه داده
میشود پس
از
راهاندازی
مجدد،
اتصالات
معلق را
پردازش کند
که رفتار
معمولاً
مورد
انتظار است.
مقدار
پیشفرض
no
است.
در نسخه
۲۴۷ اضافه
شد.
MaxConnections=
حداکثر
تعداد
اتصالاتی
که در هنگام
تنظیم Accept=yes
میتوان
بهطور
همزمان
نمونههای
سرویس را
برای آنها
اجرا کرد.
اگر
اتصالات
همزمان
بیشتری
وارد شوند،
تا زمانی که
حداقل یک
اتصال
موجود
خاتمه
یابد، رد
خواهند شد.
این تنظیم
هیچ تأثیری
بر
سوکتهای
پیکربندیشده
با Accept=no یا
سوکتهای
دیتاگرام
ندارد.
مقدار
پیشفرض 64
است.
MaxConnectionsPerSource=
حداکثر
تعداد
اتصالات
برای یک
سرویس به
ازای هر
آدرس IP مبدأ
(در مورد IPv4/IPv6)،
به ازای هر CID
مبدأ (در
مورد
AF_VSOCK)، یا
به ازای هر UID
مبدأ (در
مورد
AF_UNIX). این
دستور
بسیار شبیه
به دستور
MaxConnections= در بالا
است. مقدار
پیشفرض 0
است، یعنی
غیرفعال
است.
در نسخه
۲۳۲ اضافه
شد.
KeepAlive=
یک
آرگومان
بولی
میپذیرد.
اگر true باشد،
پشته TCP/IP پس از
۲ ساعت (بسته
به
پیکربندی
/proc/sys/net/ipv4/tcp_keepalive_time) یک
پیام زنده
نگهداشتن
برای تمام
جریانهای TCP
پذیرفتهشده
روی این
سوکت ارسال
میکند. این
گزینه سوکت
SO_KEEPALIVE را کنترل
میکند
(برای
جزئیات به
socket(7) و
TCP Keepalive HOWTO[3]
مراجعه
کنید). مقدار
پیشفرض
false
است.
KeepAliveTimeSec=
زمان (به
ثانیه) را به
عنوان
آرگومان
میپذیرد.
مدت زمانی
که اتصال
باید پیش از
شروع ارسال
کاوشهای
زنده
نگهداشتن
توسط TCP بیکار
بماند. این
گزینه سوکت
TCP_KEEPIDLE را کنترل
میکند
(برای
جزئیات به
socket(7) و
TCP Keepalive HOWTO[3]
مراجعه
کنید). مقدار
پیشفرض 7200
ثانیه (۲
ساعت) است.
در نسخه
۲۱۶ اضافه
شد.
KeepAliveIntervalSec=
زمان (به
ثانیه) را به
عنوان
آرگومان
بین هر یک از
کاوشهای
زنده
نگهداشتن
میپذیرد،
در صورتی که
گزینه سوکت
SO_KEEPALIVE روی این
سوکت تنظیم
شده باشد.
این گزینه
سوکت
TCP_KEEPINTVL را
کنترل
میکند
(برای
جزئیات به
socket(7) و
TCP Keepalive HOWTO[3]
مراجعه
کنید). مقدار
پیشفرض 75
ثانیه است.
در نسخه
۲۱۶ اضافه
شد.
KeepAliveProbes=
یک عدد
صحیح را به
عنوان
آرگومان
میپذیرد.
تعداد
کاوشهای
تأییدنشدهای
است که باید
پیش از مرده
در نظر
گرفتن
اتصال و
اطلاعرسانی
به لایه
کاربرد
ارسال شود.
این گزینه
سوکت TCP_KEEPCNT را
کنترل
میکند
(برای
جزئیات به
socket(7) و
TCP Keepalive HOWTO[3]
مراجعه
کنید). مقدار
پیشفرض 9
است.
در نسخه
۲۱۶ اضافه
شد.
NoDelay=
یک
آرگومان
بولی
میپذیرد.
الگوریتم
نیگل در TCP با
ترکیب
تعدادی از
پیامهای
خروجی کوچک
و ارسال
یکجای همه
آنها کار
میکند. این
گزینه سوکت
TCP_NODELAY را کنترل
میکند (به
tcp(7) مراجعه
کنید). مقدار
پیشفرض
false
است.
در نسخه
۲۱۶ اضافه
شد.
Priority=
یک
آرگومان
عدد صحیح
برای کنترل
اولویت
تمام
ترافیک
ارسالشده
از این سوکت
میپذیرد.
این گزینه
سوکت
SO_PRIORITY را
کنترل
میکند
(برای
جزئیات به
socket(7) مراجعه
کنید).
DeferAcceptSec=
زمان (به
ثانیه) را به
عنوان
آرگومان
میپذیرد.
در صورت
تنظیم،
فرآیند
شنونده
تنها زمانی
بیدار
میشود که
دادهها
روی سوکت
وارد شوند،
نه
بلافاصله
پس از
برقراری
اتصال.
هنگامی که
این گزینه
تنظیم شود،
از گزینه
سوکت
TCP_DEFER_ACCEPT
استفاده
خواهد شد (به
tcp(7) مراجعه
کنید)، و
هسته
بستههای
اولیه ACK فاقد
هرگونه
داده را
نادیده
میگیرد.
این
آرگومان
مقدار
تقریبی
زمانی را که
هسته باید
پیش از
بازگشت به
رفتار عادی
پذیرش
بستههای ACK
خالی منتظر
دادههای
ورودی
بماند مشخص
میکند. این
گزینه برای
پروتکلهایی
که در آنها
کارخواه
ابتدا
دادهها را
ارسال
میکند
(مانند HTTP، بر
خلاف SMTP)
سودمند
است، زیرا
فرآیند
کارساز پیش
از آنکه
بتواند
اقدامی
انجام دهد،
بیهوده
بیدار
نمیشود.
اگر
کارخواه
نیز از
گزینه TCP_DEFER_ACCEPT
استفاده
کند، ممکن
است تأخیر
اتصال
اولیه کاهش
یابد، زیرا
هسته در
بسته نهایی
برقرارکننده
اتصال (بسته
سوم در
دستتکانی
سهمرحلهای)
دادهها را
ارسال
خواهد کرد.
بهطور
پیشفرض
غیرفعال
است.
در نسخه
۲۱۶ اضافه
شد.
ReceiveBuffer=, SendBuffer=
یک
آرگومان
عدد صحیح را
برای کنترل
اندازههای
بافر
دریافت یا
ارسال این
سوکت،
بهترتیب،
میپذیرد.
این
گزینههای
سوکت
SO_RCVBUF و
SO_SNDBUF
را کنترل
میکند
(برای
جزئیات به
socket(7) مراجعه
کنید).
پسوندهای
معمول K، M، G
پشتیبانی
میشوند و
بر مبنای 1024
درک
میگردند.
IPTOS=
یک
آرگومان
عدد صحیح را
برای کنترل
فیلد نوع
خدمت IP برای
بستههای
تولیدشده
از این سوکت
میپذیرد.
این گزینه
سوکت
IP_TOS را
کنترل
میکند
(برای
جزئیات به
ip(7)
مراجعه
کنید).
میتوان یک
رشته عددی
یا یکی از
مقادیر
low-delay،
throughput،
reliability یا
low-cost
را مشخص
کرد.
IPTTL=
یک
آرگومان
عدد صحیح را
برای کنترل
فیلد طول
عمر IPv4 / شمارش
جهش IPv6 برای
بستههای
تولیدشده
از این سوکت
میپذیرد.
این
گزینههای
سوکت
IP_TTL/
IPV6_UNICAST_HOPS
را تنظیم
میکند
(برای
جزئیات به
ip(7)
و
ipv6(7) مراجعه
کنید).
Mark=
یک مقدار
عدد صحیح
میپذیرد.
نشان دیوار
آتش
بستههای
تولیدشده
توسط این
سوکت را
کنترل
میکند. این
میتواند
در منطق
دیوار آتش
برای فیلتر
کردن
بستههای
حاصل از این
سوکت
استفاده
شود. این
گزینه سوکت
SO_MARK را تنظیم
میکند.
برای
جزئیات به
iptables(8) مراجعه
کنید.
ReusePort=
یک مقدار
بولی
میپذیرد.
اگر true باشد،
به چندین
bind(2)
روی این
درگاه TCP یا UDP
اجازه
میدهد. این
گزینه سوکت
SO_REUSEPORT را کنترل
میکند.
برای
جزئیات به
socket(7) مراجعه
کنید.
در نسخه
۲۰۶ اضافه
شد.
SmackLabel=, SmackLabelIPIn=,
SmackLabelIPOut=
یک مقدار
رشتهای
میپذیرد.
ویژگیهای
گسترشیافته
"security.SMACK64"، "security.SMACK64IPIN" و
"security.SMACK64IPOUT" را
بهترتیب
کنترل
میکند،
یعنی برچسب
امنیتی FIFO، یا
برچسب
امنیتی
برای
اتصالات
ورودی یا
خروجی سوکت
بهترتیب.
برای
جزئیات به
Smack[4] مراجعه
کنید.
در نسخه
۱۹۶ اضافه
شد.
SELinuxContextFromNet=
یک
آرگومان
بولی
میپذیرد.
وقتی true باشد،
systemd تلاش
خواهد کرد
برچسب SELinux
استفادهشده
برای سرویس
نمونهسازیشده
را از روی
اطلاعات
ارائهشده
توسط طرف
مقابل از
طریق شبکه
تشخیص دهد.
توجه داشته
باشید که از
اطلاعات
ارائهشده
توسط همتا
فقط سطح
امنیت
استفاده
میشود.
سایر
بخشهای
زمینه SELinux
حاصل یا از
باینری هدف
که عملاً
توسط واحد
سوکت
راهاندازی
شده است، یا
از مقدار
گزینه
SELinuxContext=
سرچشمه
میگیرند.
این گزینه
پیکربندی
تنها زمانی
اعمال
میشود که
به سرویس
فعالشده
یک
توصیفکننده
فایل سوکت
منفرد
منتقل شود،
یعنی
نمونههای
سرویسی که
ورودی
استاندارد
متصل به یک
سوکت دارند
یا
سرویسهایی
که دقیقاً
توسط یک
واحد سوکت
راهاندازی
شدهاند.
همچنین
توجه داشته
باشید که
این گزینه
تنها زمانی
مفید است که
سیاست SELinux از
نوع MLS/MCS مستقر
شده باشد.
مقدار
پیشفرض "false"
است.
در نسخه
۲۱۷ اضافه
شد.
PipeSize=
اندازهای
بر حسب بایت
میپذیرد.
اندازه
بافر لوله
را برای FIFOهای
پیکربندیشده
در این واحد
سوکت کنترل
میکند.
برای
جزئیات به
fcntl(2) مراجعه
کنید.
پسوندهای
معمول K، M، G
پشتیبانی
میشوند و
بر مبنای 1024
درک
میگردند.
MessageQueueMaxMessages=,
MessageQueueMessageSize=
این دو
تنظیم
مقادیر عدد
صحیح
میپذیرند
و بهترتیب
فیلد mq_maxmsg یا
فیلد mq_msgsize را
هنگام
ایجاد صف
پیام کنترل
میکنند.
توجه داشته
باشید که یا
هیچکدام
یا هر دوی
این
متغیرها
باید تنظیم
شوند. برای
جزئیات به
mq_setattr(3) مراجعه
کنید.
FreeBind=
یک مقدار
بولی
میپذیرد.
این که آیا
سوکت
میتواند
به
آدرسهای IP
غیرمحلی
مقید شود یا
خیر را
کنترل
میکند. این
برای
پیکربندی
سوکتهای
شنونده روی
آدرسهای IP
خاص پیش از
آنکه آن
آدرسهای IP
با موفقیت
روی یک رابط
شبکه
پیکربندی
شوند مفید
است. این
گزینه سوکت
IP_FREEBIND/IPV6_FREEBIND را
تنظیم
میکند. به
دلایل
تابآوری و
پایداری
توصیه
میشود هر
زمان که
سوکتی را به
یک آدرس IP خاص
مقید
میکنید از
این گزینه
استفاده
نمایید.
مقدار
پیشفرض false
است.
Transparent=
یک مقدار
بولی
میپذیرد.
گزینه سوکت
IP_TRANSPARENT/IPV6_TRANSPARENT را
کنترل
میکند.
مقدار
پیشفرض false
است.
Broadcast=
یک مقدار
بولی
میپذیرد.
این گزینه
سوکت SO_BROADCAST را
کنترل
میکند، که
به
دیتاگرامهای
همگانی
اجازه
میدهد از
این سوکت
ارسال شوند.
مقدار
پیشفرض false
است.
PassCredentials=
یک مقدار
بولی
میپذیرد.
این گزینه
سوکت SO_PASSCRED را
کنترل
میکند، که
به
سوکتهای
AF_UNIX اجازه
میدهد
اطلاعات
هویتی
فرآیند
فرستنده را
در یک پیام
کمکی
دریافت
کنند. مقدار
پیشفرض false
است.
PassPIDFD=
یک مقدار
بولی
میپذیرد.
این گزینه
سوکت
SO_PASSPIDFD را
کنترل
میکند، که
به
سوکتهای
AF_UNIX اجازه
میدهد pidfd
فرآیند
فرستنده را
در یک پیام
کمکی
دریافت
کنند. مقدار
پیشفرض
false
است.
در نسخه
۲۵۸ اضافه
شد.
PassSecurity=
یک مقدار
بولی
میپذیرد.
این گزینه
سوکت SO_PASSSEC را
کنترل
میکند، که
به
سوکتهای
AF_UNIX اجازه
میدهد
زمینه
امنیتی
فرآیند
فرستنده را
در یک پیام
کمکی
دریافت
کنند. مقدار
پیشفرض false
است.
PassPacketInfo=
یک مقدار
بولی
میپذیرد.
این
گزینههای
سوکت
IP_PKTINFO،
IPV6_RECVPKTINFO،
NETLINK_PKTINFO یا
PACKET_AUXDATA را
کنترل
میکند، که
دریافت
فرادادههای
اضافی به
ازای هر
بسته را به
صورت پیام
کمکی، روی
سوکتهای
AF_INET،
AF_INET6،
AF_UNIX و
AF_PACKET فعال
میسازد.
مقدار
پیشفرض
false
است.
در نسخه
۲۴۶ اضافه
شد.
AcceptFileDescriptors=
یک مقدار
بولی
میپذیرد.
این گزینه
سوکت
SO_PASSRIGHTS را
کنترل
میکند، که
در صورت
غیرفعال
بودن، طرف
مقابل را از
ارسال
پیامهای
کمکی
SCM_RIGHTS
(همان
توصیفکنندههای
فایل) از
طریق
سوکتهای
AF_UNIX منع
میکند.
مقدار
پیشفرض
true
است.
در نسخه
۲۵۸ اضافه
شد.
Timestamping=
یکی از
مقادیر "off"،
"us" (نام
مستعار: "usec"،
"μs") یا "ns"
(نام مستعار:
"nsec") را
میپذیرد.
این
گزینههای
سوکت
SO_TIMESTAMP یا
SO_TIMESTAMPNS را
کنترل
میکند، و
فعال
میسازد که
آیا ترافیک
ورودی شبکه
باید
فراداده
برچسب
زمانی را به
همراه
داشته باشد
یا خیر.
مقدار
پیشفرض
off
است.
در نسخه
۲۴۷ اضافه
شد.
TCPCongestion=
یک مقدار
رشتهای
میپذیرد.
الگوریتم
ازدحام TCP
استفادهشده
توسط این
سوکت را
کنترل
میکند.
باید یکی از
مقادیر "westwood"،
"reno"، "cubic"، "lp"
یا هر
الگوریتم
در دسترس
دیگری باشد
که توسط
پشته IP
پشتیبانی
میشود. این
تنظیم تنها
برای
سوکتهای
جریانی
اعمال
میشود.
ExecStartPre=, ExecStartPost=
یک یا
چند خط
دستور
میپذیرد،
که
بهترتیب
قبل یا بعد
از ایجاد و
مقید شدن
سوکتها/FIFOهای
شنونده
اجرا
میشوند.
اولین بخش
از خط دستور
باید یک نام
فایل مطلق
باشد، و به
دنبال آن
آرگومانهای
فرآیند
بیایند.
چندین خط
دستور را
میتوان با
پیروی از
همان
شیوهای که
برای ExecStartPre= در
فایلهای
واحد سرویس
استفاده
میشود
مشخص کرد.
ExecStopPre=, ExecStopPost=
دستورات
اضافی که
بهترتیب
قبل یا بعد
از بسته شدن
و حذف
سوکتها/FIFOهای
شنونده
اجرا
میشوند.
چندین خط
دستور را
میتوان با
پیروی از
همان
شیوهای که
برای ExecStartPre= در
فایلهای
واحد سرویس
استفاده
میشود
مشخص کرد.
TimeoutSec=
مدت زمان
انتظار
برای پایان
یافتن
دستورات
مشخصشده
در
ExecStartPre=،
ExecStartPost=،
ExecStopPre= و
ExecStopPost= را
پیکربندی
میکند. اگر
دستوری در
مدت زمان
پیکربندیشده
خارج نشود،
سوکت
ناموفق در
نظر گرفته
شده و
مجدداً
خاموش
میشود.
تمام
دستوراتی
که هنوز در
حال اجرا
هستند به
اجبار از
طریق
SIGTERM
خاتمه
مییابند،
و پس از
تأخیر
دیگری به
همین میزان
با
SIGKILL. (به
KillMode=
در
systemd.kill(5)
مراجعه
کنید).
مقداری
بدون واحد
به ثانیه،
یا مقداری
با بازه
زمانی
مانند "5min 20s"
میپذیرد.
برای
غیرفعال
کردن منطق
مهلت
زمانی، "0"
را بدهید.
مقدار
پیشفرض
برابر با
DefaultTimeoutStartSec= از
فایل
پیکربندی
مدیر است (به
systemd-system.conf(5) مراجعه
کنید).
Service=
نام واحد
سرویسی را
که باید با
ترافیک
ورودی فعال
شود مشخص
میکند. این
تنظیم تنها
برای
سوکتهایی
با Accept=no مجاز
است. مقدار
پیشفرض آن
همان
سرویسی است
که نامی
مشابه سوکت
دارد (با
پسوند
جایگزینشده).
در بیشتر
موارد،
استفاده از
این گزینه
نباید
ضروری باشد.
توجه داشته
باشید که
تنظیم این
پارامتر
ممکن است
منجر به
اضافه شدن
وابستگیهای
اضافی به
واحد شود (به
بالا
مراجعه
کنید).
RemoveOnStop=
یک
آرگومان
بولی
میپذیرد.
در صورت
فعال بودن،
هرگونه گره
فایلی که
توسط این
واحد سوکت
ایجاد شده
است با
متوقف شدن
آن حذف
میشود. این
در مورد
سوکتهای
AF_UNIX در سیستم
فایل،
صفهای
پیام POSIX، FIFOها،
و همچنین
هرگونه
پیوند
نمادین به
آنها که با
Symlinks=
پیکربندی
شده است
اعمال
میشود.
معمولاً
استفاده از
این گزینه
نباید
ضروری باشد
و توصیه
نمیشود،
زیرا
سرویسها
ممکن است پس
از خاتمه
واحد سوکت
همچنان به
اجرا ادامه
دهند و باید
همچنان
بتوان از
طریق گره
سیستم فایل
با آنها
ارتباط
برقرار کرد.
مقدار
پیشفرض off
است.
در نسخه
۲۱۴ اضافه
شد.
Symlinks=
فهرستی
از مسیرهای
سیستم فایل
را
میپذیرد.
مسیرهای
مشخصشده
به عنوان
پیوندهای
نمادین به
مسیر سوکت
AF_UNIX یا مسیر FIFO
این واحد
سوکت ایجاد
خواهند شد.
اگر این
تنظیم
استفاده
شود، تنها
یک سوکت
AF_UNIX
در سیستم
فایل یا یک FIFO
میتواند
برای واحد
سوکت
پیکربندی
شود. از این
گزینه برای
مدیریت یک
یا چند نام
مستعار
پیوند
نمادین
برای یک
سوکت، با
متصل کردن
چرخه عمر
آنها به
یکدیگر
استفاده
کنید. توجه
داشته
باشید که
اگر ایجاد
یک پیوند
نمادین با
شکست مواجه
شود، این
امر برای
واحد سوکت
مهلک در نظر
گرفته
نمیشود و
واحد سوکت
ممکن است
همچنان
شروع شود.
اگر یک رشته
خالی
اختصاص
داده شود،
فهرست
مسیرها
بازنشانی
میشود.
مقدار
پیشفرض یک
فهرست خالی
است.
در نسخه
۲۱۴ اضافه
شد.
FileDescriptorName=
نامی را
به تمام
توصیفکنندههای
فایلی که
این واحد
سوکت
کپسولهسازی
میکند
اختصاص
میدهد. این
برای کمک به
سرویسهای
فعالشده
در شناسایی
توصیفکنندههای
فایل خاص در
صورتی که
چندین
توصیفکننده
منتقل شوند
مفید است.
سرویسها
میتوانند
از
فراخوانی
sd_listen_fds_with_names(3) برای
به دست
آوردن
نامهای
پیکربندیشده
برای
توصیفکنندههای
فایل
دریافتشده
استفاده
کنند.
نامها
ممکن است
شامل هر
نویسه ASCII
باشند، اما
باید
نویسههای
کنترلی و ":"
را حذف
کنند، و
باید
حداکثر ۲۵۵
نویسه طول
داشته
باشند. اگر
از این
تنظیم
استفاده
نشود، نام
توصیفکننده
فایل در
صورت
Accept=no
بهطور
پیشفرض
همان نام
واحد سوکت
(شامل پسوند
.socket آن) خواهد
بود، و در
غیر این
صورت "connection"
است.
در نسخه
۲۲۷ اضافه
شد.
TriggerLimitIntervalSec=, TriggerLimitBurst=
محدودیتی
را برای این
که این واحد
سوکت در یک
بازه زمانی
خاص چند بار
میتواند
فعال شود
پیکربندی
میکند.
تنظیم
TriggerLimitIntervalSec=
میتواند
برای
پیکربندی
طول بازه
زمانی با
واحدهای
زمانی
معمول "us"،
"ms"، "s"، "min"،
"h" و ...
استفاده
شود و مقدار
پیشفرض آن 2s
است (برای
جزئیات
درباره
واحدهای
زمانی
مختلفِ
قابل فهم به
systemd.time(7) مراجعه
کنید). تنظیم
TriggerLimitBurst= یک
مقدار عدد
صحیح مثبت
میپذیرد و
تعداد
فعالسازیهای
مجاز در هر
بازه زمانی
را مشخص
میکند، و
مقدار
پیشفرض آن
برای
سوکتهای
با
Accept=yes برابر
با 200 است
(بنابراین
بهطور
پیشفرض
۲۰۰
فعالسازی
در هر ۲
ثانیه را
مجاز
میداند)، و
در غیر این
صورت 20 است (۲۰
فعالسازی
در هر ۲
ثانیه). هر
کدام را روی 0
قرار دهید
تا هرگونه
محدودیت
نرخ
راهاندازی
غیرفعال
شود.
اگر این
محدودیت پر
شود، واحد
سوکت در
حالت شکست
قرار
میگیرد و
تا زمانی که
مجدداً
راهاندازی
نشود دیگر
قابل اتصال
نخواهد بود.
توجه داشته
باشید که
این
محدودیت
قبل از
اینکه
فعالسازی
سرویس در صف
قرار گیرد
اعمال
میشود.
این را با
PollLimitIntervalSec=/PollLimitBurst= که
در زیر
توضیح داده
شده مقایسه
کنید، که در
صورتی که یک
واحد سوکت
با ترافیک
ورودی
سرریز شود،
یک کندسازی
موقت را
پیادهسازی
میکند، بر
خلاف وضعیت
خرابی
دائمی که
TriggerLimitIntervalSec=/TriggerLimitBurst= به
بار
میآورد.
در نسخه
۲۳۰ اضافه
شد.
PollLimitIntervalSec=, PollLimitBurst=
محدودیتی
را برای
اینکه
رویدادهای
نظرسنجی
روی
توصیفکنندههای
فایل
پشتیبان
این واحد
سوکت با چه
تناوبی
مورد بررسی
قرار گیرند
پیکربندی
میکند. این
جفت
تنظیمات
شبیه به
TriggerLimitIntervalSec=/
TriggerLimitBurst=
هستند، اما
به جای
اعمال یک
محدودیت
(مهلک) بر
بسامد
فعالسازی،
یک محدودیت
(گذرا) بر
بسامد
نظرسنجی
اعمال
میکنند.
نحو و دامنه
پارامترهای
مورد
انتظار با
گزینههای
پیشگفته
یکسان است و
میتوان آن
را به همان
شیوه
غیرفعال
کرد.
اگر
محدودیت
نظرسنجی پر
شود،
نظرسنجی
روی آن تا
زمانی که
بازه زمانی
مشخصشده
سپری شود
بهطور
موقت
غیرفعال
میگردد.
بنابراین
محدودیت
نظرسنجی در
صورت پر شدن
تلاشهای
اتصال را
کند
میکند،
اما بر خلاف
محدودیت
راهاندازی
باعث شکست
دائمی
نخواهد شد.
این
سازوکار
توصیهشده
برای
مقابله با
تلاشهای
انکار خدمت
از طریق
طغیان
بستهها
است.
محدودیت
نظرسنجی به
ازای هر
توصیفکننده
فایل برای
گوش دادن
اعمال
میشود، بر
خلاف
محدودیت
راهاندازی
که برای کل
واحد سوکت
اعمال
میگردد.
این تمایز
برای
واحدهای
سوکتی
اهمیت دارد
که روی
چندین
توصیفکننده
فایل گوش
میدهند
(یعنی دارای
چندین بند
ListenXYZ= هستند).
این
تنظیمات
بهطور
پیشفرض
برابر با 150
رویداد
نظرسنجی در
هر ۲ ثانیه
(در حالت Accept=yes)
و 15 رویداد
(در غیر این
صورت) است.
این مقدار
بهطور
قابل توجهی
پایینتر
از مقادیر
پیشفرض
برای
محدودیت
راهاندازی
است (به بالا
مراجعه
کنید) و بدان
معناست که
محدودیت
نظرسنجی
معمولاً
باید
اطمینان
حاصل کند که
محدودیت
راهاندازی
هرگز پر
نمیشود،
مگر اینکه
یکی از
آنها
بازپیکربندی
یا غیرفعال
شود.
در نسخه
۲۵۵ اضافه
شد.
DeferTrigger=
یک
آرگومان
بولی، یا "patient"
را
میپذیرد.
فقط زمانی
میتواند
استفاده
شود که
Accept=no
باشد. در
صورت فعال
بودن، حالت
کار "lenient" به
جای "replace"
هنگام
راهاندازی
سرویس
استفاده
میشود، که
بدان
معناست
واحدهای در
حال
فعالسازی/در
حال اجرای
فعلی که با
این سرویس
در تضاد
هستند دچار
اختلال/توقف
نخواهند شد.
علاوه بر
این، اگر
تضادی وجود
داشته
باشد، واحد
سوکت منتظر
میماند تا
صف کارهای
فعلی کامل
شود و
احتمالاً
فعالسازی
را تا آن
زمان به
تعویق
میاندازد.
حد بالای کل
زمان
انتظار
میتواند
از طریق
DeferTriggerMaxSec=
پیکربندی
شود. اگر روی
yes تنظیم
شود، در
صورتی که
تمام کارها
به پایان
رسیده
باشند یا
مهلت زمانی
به سر رسیده
باشد اما
تضاد
همچنان
باقی مانده
باشد، واحد
سوکت شکست
خواهد خورد.
اگر
patient
باشد،
همیشه تا
سپری شدن
DeferTriggerMaxSec= منتظر
میماند.
مقدار
پیشفرض no
است.
این تنظیم
بهویژه در
صورتی مفید
است که واحد
سوکت باید
در طول
عملیات switch-root/soft-reboot
در حالی که
سرویس
راهاندازیشده
متوقف است
فعال
بماند.
در نسخه
۲۵۸ اضافه
شد.
DeferTriggerMaxSec=
حداکثر
زمان برای
به تعویق
انداختن
راهاندازی
را در هنگام
فعال بودن
DeferTrigger=
پیکربندی
میکند. اگر
سرویس
نتواند در
مدت زمان
مشخصشده
فعال شود،
سوکت
ناموفق در
نظر گرفته
شده و خاتمه
مییابد.
مقداری
بدون واحد
به ثانیه،
یا مقداری
با بازه
زمانی
مانند "5min 20s"
میپذیرد.
برای
غیرفعال
کردن منطق
مهلت زمانی
(پیشفرض)،
"0" یا "infinity" را
بدهید.
در نسخه
۲۵۸ اضافه
شد.
PassFileDescriptorsToExec=
یک
آرگومان
بولی
میپذیرد.
مقدار
پیشفرض off
است. در صورت
فعال بودن،
توصیفکنندههای
فایل
ایجادشده
توسط واحد
سوکت به
دستورات
ExecStartPost=،
ExecStopPre= و
ExecStopPost= از واحد
سوکت منتقل
میشوند.
توصیفکنندههای
فایل
منتقلشده
میتوانند
با
sd_listen_fds(3) به
گونهای
مورد
دسترسی
قرار گیرند
که گویی
دستورات از
واحدهای
سرویس
مرتبط
فراخوانی
شدهاند.
توجه داشته
باشید که
دستور
ExecStartPre=
نمیتواند
به
توصیفکنندههای
فایل سوکت
دسترسی
پیدا کند.
در نسخه
۲۵۶ اضافه
شد.
برای
تنظیمات
بیشتر،
systemd.unit(5)، systemd.exec(5) و
systemd.kill(5) را
بررسی
کنید.