Sockets
Sockets.Sockets
— ModuleSockets.connect
— Methodconnect([host], port::Integer) -> TCPSocket
الاتصال بالمضيف host
على المنفذ port
.
Sockets.connect
— Methodconnect(path::AbstractString) -> PipeEndpoint
الاتصال بالأنبوب المسمي / مقبس نطاق UNIX في path
.
!!! ملاحظة طول المسار في Unix محدود بين 92 و 108 بايت (راجع man unix
).
Sockets.listen
— Methodlisten([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -> TCPServer
استمع على المنفذ على العنوان المحدد بواسطة addr
. بشكل افتراضي، يستمع هذا فقط على localhost
. للاستماع على جميع الواجهات، مرر IPv4(0)
أو IPv6(0)
حسب الاقتضاء. يحدد backlog
عدد الاتصالات التي يمكن أن تكون في الانتظار (لم يتم استدعاء accept
) قبل أن يبدأ الخادم في رفضها. القيمة الافتراضية لـ backlog
هي 511.
Sockets.listen
— Methodlisten(path::AbstractString) -> PipeServer
إنشاء والاستماع على أنبوب مسمى / مقبس نطاق UNIX.
!!! ملاحظة طول المسار على Unix محدود بين 92 و 108 بايت (راجع man unix
).
Sockets.getaddrinfo
— Functiongetaddrinfo(host::AbstractString, IPAddr) -> IPAddr
يحصل على أول عنوان IP لـ host
من نوع IPAddr
المحدد. يستخدم تنفيذ getaddrinfo الأساسي لنظام التشغيل، والذي قد يقوم ببحث DNS.
أمثلة
julia> getaddrinfo("localhost", IPv6)
ip"::1"
julia> getaddrinfo("localhost", IPv4)
ip"127.0.0.1"
getaddrinfo(host::AbstractString) -> IPAddr
يحصل على أول عنوان IP متاح لـ host
، والذي قد يكون إما عنوان IPv4
أو IPv6
. يستخدم تنفيذ getaddrinfo الأساسي لنظام التشغيل، والذي قد يقوم ببحث DNS.
Sockets.getipaddr
— Functiongetipaddr() -> IPAddr
احصل على عنوان IP للجهاز المحلي، مفضلًا IPv4 على IPv6. يتم رمي استثناء إذا لم تكن هناك عناوين متاحة.
getipaddr(addr_type::Type{T}) where T<:IPAddr -> T
احصل على عنوان IP للجهاز المحلي من النوع المحدد. يتم رمي استثناء إذا لم تكن هناك عناوين من النوع المحدد متاحة.
هذه الدالة هي غلاف للتوافق مع الإصدارات السابقة حول getipaddrs
. يجب على التطبيقات الجديدة استخدام getipaddrs
بدلاً من ذلك.
أمثلة
julia> getipaddr()
ip"192.168.1.28"
julia> getipaddr(IPv6)
ip"fe80::9731:35af:e1c5:6e49"
انظر أيضًا getipaddrs
.
Sockets.getipaddrs
— Functiongetipaddrs(addr_type::Type{T}=IPAddr; loopback::Bool=false) where T<:IPAddr -> Vector{T}
احصل على عناوين IP لجهاز الكمبيوتر المحلي.
تعيين معلمة addr_type
الاختيارية إلى IPv4
أو IPv6
يتسبب في إرجاع عناوين من هذا النوع فقط.
تحدد معلمة loopback
ما إذا كانت عناوين الحلقة (مثل ip"127.0.0.1"
، ip"::1"
) مدرجة.
هذه الوظيفة متاحة اعتبارًا من Julia 1.2.
أمثلة
julia> getipaddrs()
5-element Array{IPAddr,1}:
ip"198.51.100.17"
ip"203.0.113.2"
ip"2001:db8:8:4:445e:5fff:fe5d:5500"
ip"2001:db8:8:4:c164:402e:7e3c:3668"
ip"fe80::445e:5fff:fe5d:5500"
julia> getipaddrs(IPv6)
3-element Array{IPv6,1}:
ip"2001:db8:8:4:445e:5fff:fe5d:5500"
ip"2001:db8:8:4:c164:402e:7e3c:3668"
ip"fe80::445e:5fff:fe5d:5500"
انظر أيضًا islinklocaladdr
.
Sockets.islinklocaladdr
— Functionislinklocaladdr(addr::IPAddr)
يختبر ما إذا كان عنوان IP هو عنوان محلي للربط. العناوين المحلية للربط ليست مضمونة أن تكون فريدة خارج شريحة الشبكة الخاصة بها، لذلك لا تقوم أجهزة التوجيه بإعادة توجيهها. العناوين المحلية للربط تأتي من كتل العناوين 169.254.0.0/16
أو fe80::/10
.
أمثلة
filter(!islinklocaladdr, getipaddrs())
Sockets.getalladdrinfo
— Functiongetalladdrinfo(host::AbstractString) -> Vector{IPAddr}
يحصل على جميع عناوين IP لـ host
. يستخدم تنفيذ getaddrinfo
الأساسي لنظام التشغيل، والذي قد يقوم بعملية بحث DNS.
أمثلة
julia> getalladdrinfo("google.com")
2-element Array{IPAddr,1}:
ip"172.217.6.174"
ip"2607:f8b0:4000:804::200e"
Sockets.DNSError
— TypeDNSError
نوع الاستثناء الذي يتم رميه عندما يحدث خطأ في بحث DNS. يشير حقل host
إلى سلسلة عنوان URL للمضيف. يشير حقل code
إلى رمز الخطأ بناءً على libuv.
Sockets.getnameinfo
— Functiongetnameinfo(host::IPAddr) -> String
يؤدي إلى بحث عكسي عن عنوان IP لإرجاع اسم المضيف والخدمة باستخدام تنفيذ getnameinfo
الأساسي لنظام التشغيل.
أمثلة
julia> getnameinfo(IPv4("8.8.8.8"))
"google-public-dns-a.google.com"
Sockets.getsockname
— Functiongetsockname(sock::Union{TCPServer, TCPSocket}) -> (IPAddr, UInt16)
احصل على عنوان IP والمنفذ الذي تم ربط المقبس المعطى به.
Sockets.getpeername
— Functiongetpeername(sock::TCPSocket) -> (IPAddr, UInt16)
احصل على عنوان IP ورقم المنفذ لنقطة النهاية البعيدة التي يتصل بها المقبس المعطى. صالح فقط لمقابس TCP المتصلة.
Sockets.IPAddr
— TypeSockets.IPv4
— TypeIPv4(host::Integer) -> IPv4
إرجاع كائن IPv4 من عنوان IP host
بتنسيق Integer
.
أمثلة
julia> IPv4(3223256218)
ip"192.30.252.154"
IPv4(str::AbstractString) -> IPv4
تحليل سلسلة عنوان IPv4 إلى كائن IPv4
.
أمثلة
julia> IPv4("127.0.0.1")
ip"127.0.0.1"
Sockets.IPv6
— TypeIPv6(host::Integer) -> IPv6
إرجاع كائن IPv6 من عنوان IP host
بتنسيق Integer
.
أمثلة
julia> IPv6(3223256218)
ip"::c01e:fc9a"
IPv6(str::AbstractString) -> IPv6
تحليل سلسلة عنوان IPv6 إلى كائن IPv6
.
أمثلة
julia> IPv6("::1")
ip"::1"
Sockets.@ip_str
— Macro@ip_str str -> IPAddr
قم بتحليل str
كعنوان IP.
أمثلة
julia> ip"127.0.0.1"
ip"127.0.0.1"
julia> @ip_str "2001:db8:0:0:0:0:2:1"
ip"2001:db8::2:1"
Sockets.TCPSocket
— TypeTCPSocket(; delay=true)
افتح مقبس TCP باستخدام libuv. إذا كان delay
صحيحًا، فإن libuv يؤخر إنشاء موصوف ملف المقبس حتى أول استدعاء لـ bind
. يحتوي TCPSocket
على حقول متنوعة للدلالة على حالة المقبس بالإضافة إلى مخازن الإرسال/الاستقبال الخاصة به.
Sockets.UDPSocket
— TypeUDPSocket()
افتح مقبس UDP باستخدام libuv. يحتوي UDPSocket
على حقول مختلفة للدلالة على حالة المقبس.
Sockets.accept
— Functionaccept(server[, client])
يقبل اتصالاً على الخادم المعطى ويعيد اتصالاً بالعميل. يمكن توفير دفق عميل غير مُهيأ، وفي هذه الحالة سيتم استخدامه بدلاً من إنشاء دفق جديد.
Sockets.listenany
— Functionlistenany([host::IPAddr,] port_hint; backlog::Integer=BACKLOG_DEFAULT) -> (UInt16, TCPServer)
قم بإنشاء TCPServer
على أي منفذ، باستخدام التلميح كنقطة انطلاق. تُرجع مجموعة من المنفذ الفعلي الذي تم إنشاء الخادم عليه والخادم نفسه. تحدد حجة backlog الطول الأقصى الذي يمكن أن تنمو إليه قائمة الاتصالات المعلقة لـ sockfd.
Base.bind
— Functionbind(socket::Union{TCPServer, UDPSocket, TCPSocket}, host::IPAddr, port::Integer; ipv6only=false, reuseaddr=false, kws...)
قم بربط socket
بالـ host:port
المعطى. لاحظ أن 0.0.0.0
ستستمع على جميع الأجهزة.
- معلمة
ipv6only
تعطل وضع المكدس المزدوج. إذا كانتipv6only=true
، يتم إنشاء مكدس IPv6 فقط. - إذا كانت
reuseaddr=true
، يمكن لعدة خيوط أو عمليات الربط إلى نفس العنوان دون خطأ إذا كانت جميعها قد ضبطتreuseaddr=true
، ولكن فقط الأخير الذي يقوم بالربط سيتلقى أي حركة مرور.
bind(chnl::Channel, task::Task)
ربط عمر chnl
بمهمة. يتم إغلاق Channel
chnl
تلقائيًا عند انتهاء المهمة. يتم تمرير أي استثناء غير معالج في المهمة إلى جميع المنتظرين على chnl
.
يمكن إغلاق كائن chnl
بشكل صريح بغض النظر عن إنهاء المهمة. لا تؤثر المهام المنتهية على كائنات Channel
المغلقة بالفعل.
عندما يتم ربط قناة بعدة مهام، ستغلق المهمة الأولى التي تنتهي القناة. عندما يتم ربط عدة قنوات بنفس المهمة، فإن إنهاء المهمة سيغلق جميع القنوات المرتبطة.
أمثلة
julia> c = Channel(0);
julia> task = @async foreach(i->put!(c, i), 1:4);
julia> bind(c,task);
julia> for i in c
@show i
end;
i = 1
i = 2
i = 3
i = 4
julia> isopen(c)
false
julia> c = Channel(0);
julia> task = @async (put!(c, 1); error("foo"));
julia> bind(c, task);
julia> take!(c)
1
julia> put!(c, 1);
ERROR: TaskFailedException
Stacktrace:
[...]
nested task error: foo
[...]
Sockets.send
— Functionsend(socket::UDPSocket, host::IPAddr, port::Integer, msg)
إرسال msg
عبر socket
إلى host:port
.
Sockets.recv
— Functionrecv(socket::UDPSocket)
اقرأ حزمة UDP من المقبس المحدد، وأعد البايتات المستلمة. هذه المكالمة تحجب.
Sockets.recvfrom
— Functionrecvfrom(socket::UDPSocket) -> (host_port, data)
اقرأ حزمة UDP من المقبس المحدد، معيدًا زوجًا من (host_port, data)
، حيث سيكون host_port
عنوان InetAddr{IPv4} أو InetAddr{IPv6}، حسب الاقتضاء.
قبل إصدار Julia 1.3، كانت القيمة الأولى المعادة عنوانًا (IPAddr
). في الإصدار 1.3 تم تغييره إلى InetAddr
.
Sockets.setopt
— Functionsetopt(sock::UDPSocket; multicast_loop=nothing, multicast_ttl=nothing, enable_broadcast=nothing, ttl=nothing)
تعيين خيارات مقبس UDP.
multicast_loop
: حلقة العودة لحزم البث المتعدد (افتراضي:true
).multicast_ttl
: TTL لحزم البث المتعدد (افتراضي:nothing
).enable_broadcast
: يجب تعيين العلامة إلىtrue
إذا كان سيتم استخدام المقبس لرسائل البث، وإلا ستعيد نظام UDP خطأ في الوصول (افتراضي:false
).ttl
: زمن الحياة للحزم المرسلة عبر المقبس (افتراضي:nothing
).
Sockets.nagle
— Functionnagle(socket::Union{TCPServer, TCPSocket}, enable::Bool)
تجمع خوارزمية ناغل حزم TCP الصغيرة المتعددة في حزم أكبر. يمكن أن يحسن ذلك من خلال نقل البيانات ولكن قد يؤدي إلى زيادة زمن الاستجابة. خوارزمية ناغل مفعلة بشكل افتراضي. تقوم هذه الدالة بتحديد ما إذا كانت خوارزمية ناغل نشطة على خادم TCP أو مقبس معين. الخيار المعاكس يسمى TCP_NODELAY
في لغات أخرى.
تتطلب هذه الدالة Julia 1.3 أو أحدث.
Sockets.quickack
— Functionquickack(socket::Union{TCPServer, TCPSocket}, enable::Bool)
في أنظمة لينكس، يتم تعطيل أو تمكين TCP_QUICKACK على socket
.