کتابخانه‌ی استاندارد · شبکه

تی سی پی شبکه net/tcp

سرور و کارخواه TCP: گوش دادن، وصل شدن، خواندن و نوشتن، TLS و استخر اتصال.

واردسازی شبکه.تی سی پی شبکه
در این صفحه
  1. گونه‌ها
  2. روال‌ها

TCP پایه‌ی بیشتر پروتکل‌های اینترنت است: یک جریان مطمئن و مرتب از بایت‌ها میان دو برنامه. سرور با پیوند روی یک درگاه گوش می‌دهد و با پذیرش هر کارخواه تازه را می‌گیرد؛ کارخواه با شماره گیری وصل می‌شود.

پذیرش و خواندن تا رسیدن داده صبر می‌کنند؛ برای کار با چند کارخواه، هر کدام را در یک نخ جدا (spawn) اداره کنید یا مهلت بگذارید. نمونه‌ها روی 127.0.0.1 اجرا می‌شوند.

گونه‌ها

سرور Server

ساختار سرور
سرور TCP که روی یک درگاه گوش می‌دهد.
نامانگلیسیگونهتوضیح
fdfdصحیح۶۴ = -1شناسه‌ی سوکت؛ ‎-1 یعنی نامعتبر.
portportصحیح = 0درگاهی که سرور روی آن گوش می‌دهد.
net-tcp-Echo.salam
واردسازی شبکه.تی سی پی شبکه

ناپایا سرور := تی سی پی شبکه.سرور {}

روال پاسخ‌گو():
    ا := تی سی پی شبکه.پذیرش(سرور)
    پیام := تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
    _ := تی سی پی شبکه.نوشتن(ا، "پژواک: " + پیام)
    تی سی پی شبکه.بستن(ا)
پایان

روال ریشه:
    سرور = تی سی پی شبکه.پیوند(۰)
    سرچاپ تی سی پی شبکه.معتبر(سرور)، تی سی پی شبکه.درگاه(سرور) > ۰
    ن := spawn(پاسخ‌گو)
    ا := تی سی پی شبکه.شماره گیری("127.0.0.1"، تی سی پی شبکه.درگاه(سرور))
    سرچاپ تی سی پی شبکه.اتصال معتبر(ا)
    تی سی پی شبکه.تنظیم مهلت(ا، ۲۰۰۰)
    تی سی پی شبکه.تنظیم زنده‌نگه‌داری(ا، درست)
    تی سی پی شبکه.غیرفعال‌سازی نگل(ا، درست)
    سرچاپ تی سی پی شبکه.نوشتن(ا، "سلام")
    سرچاپ تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
    تی سی پی شبکه.بستن(ا)
    join(ن)
    تی سی پی شبکه.بستن سرور(سرور)
    سرچاپ تی سی پی شبکه.اتصال معتبر(تی سی پی شبکه.شماره گیری("127.0.0.1"، ۱))
پایان
خروجیtrue true true 8 پژواک: سلام false

اتصال شبکه Conn

ساختار اتصال شبکه
یک اتصال TCP.
نامانگلیسیگونهتوضیح
fdfdصحیح۶۴ = -1شناسه‌ی سوکت؛ ‎-1 یعنی نامعتبر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

مدخل استخر PoolEntry

ساختار مدخل استخر
یک اتصال بی‌کار در استخر.
نامانگلیسیگونهتوضیح
keykeyرشته = ""میزبان و درگاه.
connconnاتصال شبکهاتصال.
put_at_msput_at_msصحیح۶۴ = 0زمان برگرداندن به استخر.
net-tcp-Pool.salam
واردسازی شبکه.تی سی پی شبکه

روال ریشه:
    س := تی سی پی شبکه.پیوند(۰)
    درگاه := تی سی پی شبکه.درگاه(س)
    ناپایا استخر := تی سی پی شبکه.استخر جدید()
    ا := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۱۰۰۰)
    سرچاپ تی سی پی شبکه.اتصال معتبر(ا)، تی سی پی شبکه.تعداد استخر(استخر)
    تی سی پی شبکه.بازگرداندن اتصال(استخر، "127.0.0.1"، درگاه، ا، ۱۰۰۰)
    سرچاپ تی سی پی شبکه.تعداد استخر(استخر)
    دوباره := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۲۰۰۰)
    سرچاپ دوباره.fd == ا.fd، تی سی پی شبکه.تعداد استخر(استخر)
    تی سی پی شبکه.بازگرداندن اتصال(استخر، "127.0.0.1"، درگاه، دوباره، ۲۰۰۰)
    تازه := تی سی پی شبکه.دریافت اتصال(استخر، "127.0.0.1"، درگاه، ۲۰۰۰ + استخر.idle_ttl_ms + ۱)
    سرچاپ تی سی پی شبکه.اتصال معتبر(تازه)، تی سی پی شبکه.تعداد استخر(استخر)
    تی سی پی شبکه.بستن(تازه)
    تی سی پی شبکه.بستن سرور(س)
پایان
خروجیtrue 0 1 true 0 true 0

مدخل‌های استخر PoolEntries

ساختار مدخل‌های استخر
فهرست اتصال‌های بی‌کار.
نامانگلیسیگونهتوضیح
itemsitemsوکتور<مدخل استخر>اتصال‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam

استخر اتصال Pool

ساختار استخر اتصال
استخر اتصال‌های بی‌کار برای استفاده‌ی دوباره.
نامانگلیسیگونهتوضیح
entriesentriesمدخل‌های استخراتصال‌های بی‌کار.
idle_ttl_msidle_ttl_msصحیح۶۴ = 30000بیشترین زمانی که اتصال بی‌کار نگه داشته می‌شود؛ پیش‌فرض ۳۰ ثانیه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam

روال‌ها

پیوند Bind

روال پیوند(port: صحیح): سرور
روی درگاه داده‌شده گوش می‌دهد؛ درگاه صفر یعنی سیستم یک درگاه آزاد انتخاب کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

معتبر Ok

روال معتبر(srv: سرور): منطقی
اگر سرور درست ساخته شده باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

درگاه Port

روال درگاه(srv: سرور): صحیح
درگاه واقعی سرور؛ برای وقتی که صفر داده‌اید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

پذیرش Accept

روال پذیرش(srv: سرور): اتصال شبکه
صبر می‌کند تا کارخواهی وصل شود و اتصالش را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

بستن سرور CloseServer

روال بستن سرور(srv: سرور)
سرور را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

اتصال معتبر ConnOk

روال اتصال معتبر(c: اتصال شبکه): منطقی
اگر اتصال برقرار باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

خواندن Read

روال خواندن(c: اتصال شبکه، max: صحیح): رشته
حداکثر max بایت می‌خواند؛ اگر طرف دیگر اتصال را بسته باشد، رشته‌ی خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

نوشتن Write

روال نوشتن(c: اتصال شبکه، data: رشته): صحیح
متن را می‌فرستد و تعداد بایت‌های فرستاده‌شده را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

خواندن بایت ReadBytes

روال خواندن بایت(c: اتصال شبکه، buf: تهی*، max: صحیح): صحیح
حداکثر max بایت را در حافظه می‌خواند و تعداد را برمی‌گرداند؛ صفر یا کمتر یعنی پایان یا خطا.
net-tcp-Bytes.salam
واردسازی شبکه.تی سی پی شبکه
واردسازی حافظه

ناپایا سرور := تی سی پی شبکه.سرور {}

روال پاسخ‌گو():
    ا := تی سی پی شبکه.پذیرش(سرور)
    تی سی پی شبکه.تنظیم مهلت خواندن(ا، ۲۰۰۰)
    تی سی پی شبکه.تنظیم مهلت نوشتن(ا، ۲۰۰۰)
    _ := تی سی پی شبکه.خواندن(ا، ۱۰۲۴)
    تی سی پی شبکه.نوشتن اچ تی تی پی(ا، "200 OK"، "text/plain"، "سلام")
    تی سی پی شبکه.بستن(ا)
پایان

روال ریشه:
    سرور = تی سی پی شبکه.پیوند(۰)
    ن := spawn(پاسخ‌گو)
    ا := تی سی پی شبکه.شماره گیری("127.0.0.1"، تی سی پی شبکه.درگاه(سرور))
    درخواست := "GET / HTTP/1.0\r\n\r\n"
    سرچاپ تی سی پی شبکه.نوشتن بایت(ا، درخواست برگردان تهی*، درخواست.طول())
    ب := حافظه.تخصیص صفرشده(۲۵۶ برگردان طبیعی۶۴)
    ناپایا جمع := ۰
    تا درست:
        ر := تی سی پی شبکه.خواندن بایت(ا، ب، ۲۵۵)
        اگر ر <= ۰:
            بشکن
        پایان
        جمع += ر
    پایان
    سرچاپ جمع > ۰
    دوباره := تی سی پی شبکه.اتصال از توصیف‌گر(ا.fd)
    سرچاپ دوباره.fd == ا.fd
    تی سی پی شبکه.بستن(ا)
    join(ن)
    تی سی پی شبکه.بستن سرور(سرور)
    حافظه.آزادسازی(ب)
پایان
خروجی18 true true

نوشتن بایت WriteBytes

روال نوشتن بایت(c: اتصال شبکه، ptr: تهی*، n: صحیح): صحیح
n بایت از حافظه می‌فرستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam

بستن Close

روال بستن(c: اتصال شبکه)
اتصال را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

شماره گیری Dial

روال شماره گیری(host: رشته، port: صحیح): اتصال شبکه
به میزبان و درگاه وصل می‌شود؛ اگر نشود، اتصال معتبر نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

شماره گیری امن DialTLS

روال شماره گیری امن(host: رشته، port: صحیح): tls.اتصال شبکه
اتصال رمزشده‌ی TLS برقرار می‌کند؛ برای HTTPS و مانند آن.
net-tcp-TLS.salam
واردسازی شبکه.تی سی پی شبکه
واردسازی تی ال اس

روال ریشه:
    _ := تی سی پی شبکه.شماره گیری امن("example.com"، ۴۴۳)
    ساده := تی سی پی شبکه.شماره گیری("example.com"، ۴۴۳)
    _ := تی سی پی شبکه.ارتقا به تی ال اس(ساده، تی ال اس.پیکربندی جدید("example.com"))
پایان

ارتقا به تی ال اس UpgradeTLS

روال ارتقا به تی ال اس(c: اتصال شبکه، cfg: tls.Config): tls.اتصال شبکه
اتصال ساده‌ی موجود را با پیکربندی داده‌شده به TLS ارتقا می‌دهد؛ مثل STARTTLS.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-TLS.salam

اتصال از توصیف‌گر ConnFromFd

روال اتصال از توصیف‌گر(fd: صحیح۶۴): اتصال شبکه
اتصال را از شناسه‌ی سوکتی که جای دیگری ساخته شده می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam

نوشتن اچ تی تی پی WriteHTTP

روال نوشتن اچ تی تی پی(c: اتصال شبکه، status_line: رشته، content_type: رشته، body: رشته)
پاسخ کامل HTTP/1.1 با خط وضعیت، نوع محتوا، Content-Length و Connection: close می‌فرستد؛ برای سرورهای خیلی ساده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam

تنظیم مهلت خواندن SetReadDeadline

روال تنظیم مهلت خواندن(c: اتصال شبکه، millis: صحیح)
خواندن حداکثر چند میلی‌ثانیه صبر کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam

تنظیم مهلت نوشتن SetWriteDeadline

روال تنظیم مهلت نوشتن(c: اتصال شبکه، millis: صحیح)
نوشتن حداکثر چند میلی‌ثانیه صبر کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Bytes.salam

تنظیم مهلت SetDeadline

روال تنظیم مهلت(c: اتصال شبکه، millis: صحیح)
مهلت خواندن و نوشتن را با هم تنظیم می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

تنظیم زنده‌نگه‌داری SetKeepAlive

روال تنظیم زنده‌نگه‌داری(c: اتصال شبکه، enable: منطقی)
بسته‌های زنده‌نگه‌داری TCP را روشن یا خاموش می‌کند تا اتصال بی‌کار قطع‌شده شناخته شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

غیرفعال‌سازی نگل SetNoDelay

روال غیرفعال‌سازی نگل(c: اتصال شبکه، enable: منطقی)
الگوریتم نیگل را خاموش می‌کند تا بسته‌های کوچک بی‌درنگ فرستاده شوند؛ برای برنامه‌های تعاملی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Echo.salam

استخر جدید NewPool

روال استخر جدید(): استخر اتصال
استخر خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam

دریافت اتصال Get

روال دریافت اتصال(p &: استخر اتصال، host: رشته، port: صحیح، now_ms: صحیح۶۴): اتصال شبکه
اگر اتصال بی‌کار تازه‌ای به این میزبان در استخر باشد، همان را برمی‌گرداند؛ وگرنه اتصال تازه‌ای می‌سازد. now_ms زمان فعلی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam

بازگرداندن اتصال Put

روال بازگرداندن اتصال(p &: استخر اتصال، host: رشته، port: صحیح، c: اتصال شبکه، now_ms: صحیح۶۴)
اتصال را پس از کار به استخر برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam

تعداد استخر PoolLen

روال تعداد استخر(p: استخر اتصال): صحیح
تعداد اتصال‌های بی‌کار در استخر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: net-tcp-Pool.salam