Files
boc/aamos-ledger-rust/target/debug/deps/libsocket2-c161f09f0083d1e0.rmeta
T

1076 lines
372 KiB
Plaintext
Raw Normal View History

rust
Ï#rustc 1.96.0 (ac68faa20 2026-05-25)ÁÀ뉊]!ÜÛê(¹Þ—šên-5be7b69c3ff7b5b8ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁòÖÀH•‘PIÓHã#£-055f30b747f859b6Árustc_std_workspace_coreÁ­Cçß^ò½èÝ$­Çÿ+Cé-c4878ee60b2242c9ÁŸÃï+Ñ]ŠqB<ÏïW#-8dd1dd90e70d0b6aÁ miniz_oxideÁ€š»J(P>àö÷g\K-1eb618da2918ab7fÁadler2ÁÆ;+Þ®5¥Ìýݰ¦ÛLˆ-f7919172d268e069Á hashbrownÁPäV9ÒÆèÜ"ÊÖVŽ\-0fc2184a5da6723aÁrustc_std_workspace_allocÁs&ØòØy¯s•bæ!‰ýŠ-97e4bf30be240674Á
std_detectÁhŠBîÙºÌI®ËÅš-9dbbf8346ba7ac8bÁrustc_demangleÁûë9´Ç×@Œ’ùXFº-f33013f239bf9f14Ácfg_ifÁÜLhž§Œaã¯>­-0a71c8f33a838301Á addr2lineÁ׎Þ!]8V$É@@-e618e6be60e87ba2ÁgimliÁ¸
°µ~Î1‹Ñt ðÁ€w-1f7768a68858f670ÁobjectÁ
áPÃ?­À¶¼QHJ¥-914cd6a4dbe590d1ÁmemchrÁ›º«8Ór­2Ù $¨ûib-cf21ca6f2bb15dcdÁë
‹ás«LÖ€îâƒ×ɯŒ-ee6f3747e38367f0Áæ\‹±ÔcdùÀTƒ-f86f80b348d33b13ÁSOCKADDR_IN6_0ÁtøâtestsÁ,Ð{$Å{U
FromRawSocketÁl™âU
IntoRawSocketÁl¨â "Uset_common_accept_flagsÁ¼Àó úandroidÁ¬Ëñú dragonflyÁ¼æñúfreebsdÁ¬ƒòúfuchsiaÁ¬žòúillumosÁ¬¹òúlinuxÁœÔòúnetbsdÁ¤íòúopenbsdÁ¬‡óúcygwinÁ¤¢óüÅñôüÁñù± AsRawSocketÁ\øâ±AsSocketÁD…â±§lâ.IPPROTO_DIVERTÁtŸú¶ ¬Ùú
¬ðüØ.É SO_LINGERÁL¼1úiosÁŒ—0úvisionosÁ´®0úmacosÁœÊ0útvosÁ”ã0úwatchosÁ¬û0ü‘0ÉIPV6_ADD_MEMBERSHIPÁœÏ@
ú  ¼±=ú¶ ¬Î=úhaikuÁœé=úÞ ¬‚>úå Œ>úô ´´>úˆ œÐ>ú
¤é>ú
¬ƒ?úsolarisÁ¬ž?ú ”¹?ú© ¬Ñ?úwasiÁ”ð?îp1ÁŒˆ@œ‡@üï?,ü«=óÉIPV6_DROP_MEMBERSHIPÁ¤ø@
ú  íúëúú äúÞ âúå àúô Þúˆ Üú
Úú
ØúÓ
Ïú Íú© ËúÅîÁ¿½º¼ÉKEEPALIVE_TIMEÁtïHúå Œ‡Gúô ´žGúˆ œºGúntoÁŒ×Gînto70Á¤îGînto71Á¤„HüíG,üÖGEú ”¡Hú© ¬¹HüÉ MAX_BUF_LENÁ\ÑUúå Œ²Túô ´ÉTúˆ œåTú ”þTú© ¬–Uú«
¤±Uü¬TœÉIovLenÁ4ê^úò œÀYîmuslÁœîYîohosÁœZîuclibcÁ¬´Zû32ÁÜËZü³Z4üàY‘ü¶YÁúaixÁŒýZú  ¼”[ú¶ ¬±[úÊ ¬Ì[úú œç[úhurdÁ”€\úÞ ¬˜\úå Œ³\úô ´Ê\úˆ œæ\ú
¤ÿ\ú¥Œ™]ú
¬°]úÓ
¬Ë]ú ”æ]ú© ¬þ]úespidfÁ¤™^úvitaÁ”³^ú«
¤Ë^ü­YµÉ
\¤ˆúµ”€ˆÉset_nonblockingÁ|¦Œúµ”ƒŒÀ 

impl_debugÁ÷sockaddrÁ 
  
 socklen_tÁ sa_family_tÁSockAddrStorageÁ(storageÁ*zeroedÁ*š*view_asÁ-¥/×1æ 1try_initÁ33¥3 STORAGE_SIZEÁ3 1ú8¡1
set_lengthÁ1familyÁ1domainÁ11as_ptrÁ1
as_storageÁ1is_ipv4Á1is_ipv6Á1is_unixÁ1 as_socketÁ1as_socket_ipv4Á1as_socket_ipv6Á1as_bytesÁG÷I÷K÷M×O R§SsocketÁUUUUUUUUUU U
U U U
UUUUUUUUUUUUUUUUUUU U!U"USocketÁyinnerÁU{from_rawÁ{as_rawÁ{into_rawÁ{æ {new_rawÁ {pairÁ{pair_rawÁƒ ƒ {bindÁ{connectÁ{connect_timeoutÁ{listenÁ{acceptÁ{
accept_rawÁ {
local_addrÁ{ peer_addrÁ{!{ try_cloneÁ{
{ï{shutdownÁ{recvÁ{recv_out_of_bandÁ{recv_with_flagsÁ{
recv_vectoredÁ{recv_vectored_with_flagsÁ{peekÁ{ recv_fromÁ{recv_from_with_flagsÁ{recv_from_vectoredÁ{recv_from_vectored_with_flagsÁ{ peek_fromÁ{ peek_senderÁ{recvmsgÁ{sendÁ{send_with_flagsÁ{
send_vectoredÁ{send_vectored_with_flagsÁ{send_out_of_bandÁ{send_toÁ{send_to_with_flagsÁ{send_to_vectoredÁ{send_to_vectored_with_flagsÁ{sendmsgÁUset_common_typeÁUset_common_flagsÁU­ broadcastÁ® ­
set_broadcastÁ­
take_errorÁ­ keepaliveÁ² ­
set_keepaliveÁ­lingerÁ­
set_lingerÁ­out_of_band_inlineÁ· ­set_out_of_band_inlineÁ­passcredÁº ­ set_passcredÁ­priorityÁ½ ­ set_priorityÁ­recv_buffer_sizeÁÀ ­set_recv_buffer_sizeÁ­ read_timeoutÁ­set_read_timeoutÁ­
reuse_addressÁÅ ­set_reuse_addressÁ­send_buffer_sizeÁÈ ­set_send_buffer_sizeÁ­
write_timeoutÁ­set_write_timeoutÁU from_lingerÁU into_lingerÁUÏheader_included_v4ÁÐ Ïset_header_included_v4ÁÏip_transparent_v4ÁÓ Ïset_ip_transparent_v4ÁÏjoin_multicast_v4ÁÏleave_multicast_v4ÁÏjoin_multicast_v4_nÁÏleave_multicast_v4_nÁÏ join_ssm_v4ÁÏ leave_ssm_v4ÁÏmulticast_all_v4ÁÜ Ïset_multicast_all_v4ÁÏmulticast_if_v4ÁÏset_multicast_if_v4ÁÏmulticast_loop_v4Áá Ïset_multicast_loop_v4ÁÏmulticast_ttl_v4Áä Ïset_multicast_ttl_v4ÁÏttl_v4Áç Ï
set_ttl_v4ÁÏ
set_tos_v4ÁÏtos_v4Áë Ïset_recv_tos_v4ÁÏ recv_tos_v4Áî Ïoriginal_dst_v4ÁUñheader_included_v6Áò ñset_header_included_v6Áñip_transparent_v6Áõ ñset_ip_transparent_v6Áñjoin_multicast_v6Áñleave_multicast_v6Áñmulticast_hops_v6Áú ñset_multicast_hops_v6Áñmulticast_all_v6Áý ñset_multicast_all_v6Áñmulticast_if_v6Á ñset_multicast_if_v6Áñmulticast_loop_v6Áƒ ñset_multicast_loop_v6Áñunicast_hops_v6Á ñset_unicast_hops_v6Áñonly_v6Á ñ set_only_v6Áñrecv_tclass_v6ÁŒ ñset_recv_tclass_v6Áñrecv_hoplimit_v6Á ñset_recv_hoplimit_v6Áñoriginal_dst_v6ÁUtcp_keepalive_timeÁtcp_keepalive_intervalÁ tcp_keepalive_retriesÁ set_tcp_keepaliveÁ tcp_nodelayÁš set_tcp_nodelayÁUreadÁ
read_vectoredÁŸ U¡'aÁ¡ð1¡ü1¤ U¦writeÁ¦write_vectoredÁ¦flushÁUªš2ª½2ªÊ2ªà2U ¯×sockrefÁ±±±±±±±±±±SockRefÁ»'sÁ»¨» _lifetimeÁ±¿ç3¿å¿´±Ãç3äÃ÷±Ç×sysÁÉÉÉÉÉÉÉÉÉÉ É
É É É
ÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉ É!É"É#É$É%É&É'É(É)É*É+É,É-É.É/É0É1É2É3É4É5É6É7É8É9É:É;É<É=É>É?É@ÉAÉBÉCÉDÉEÉFÉGÉHÉIÉJÉKÉLÉMÉNÉOÉPÉQÉRÉSÉTÉUÉVÉWÉXÉYÉZÉ[É\É]É^É_É`ÉaÉbÉcÉdÉeÉfÉgÉhÉiÉjÉkÉlÉmÉnÉoÉpÉqÉrÉsÉtÉuÉvÉwÉxÉyÉzÉ{É|É}É~ÉÉÉÉXÉÉsyscallÁÉÿÉTCP_CA_NAME_MAXÁÉåÉÒPACKETÁÒVSOCKÁÉÕ
ÕcloexecÁÕ_cloexecÁÉÙis_end_of_recordÁÙis_out_of_bandÁÙ
is_confirmÁÙ is_dontrouteÁÉÞ×ÉMaybeUninitSliceÁàš2àÁàù3Éäš2Éæš2Éèš2èæ èas_sliceÁè as_mut_sliceÁÉoffset_of_pathÁÉ
unix_sockaddrÁɃÉset_msghdr_nameÁÉset_msghdr_iovÁÉset_msghdr_controlÁÉset_msghdr_flagsÁÉ msghdr_flagsÁÉmsghdr_control_lenÁÉövsockÁöas_vsock_addressÁÉù
is_unnamedÁú ùas_sockaddr_unÁü ùpath_lenÁù
path_bytesÁùas_unixÁù as_pathnameÁ  ùas_abstract_namespaceÁ  ÉÁÉ RawSocketÁÉsocket_from_rawÁÉ
socket_as_rawÁÉsocket_into_rawÁɨÉ
socketpairÁ  ÉÇ ÉÒ É poll_connectÁÉö Ƀ É getsocknameÁ  É getpeernameÁœ œ ÉÍÉ
ÉïÉë¢ Éú¤ É𦠧 Éè© É²É¬ Éú® Ɉ ° É© Éó ³ Éš!ÉÓ! É timeout_optÁÉ from_timevalÁÉset_timeout_optÁÉ into_timevalÁÉÅ0¼ ɤ1É into_secsÁÉ fcntl_getÁÉ fcntl_addÁÁ É fcntl_removeÁà É
getsockoptÁťŠÉ
setsockoptÁÈ¥È É
to_in_addrÁÉ from_in_addrÁÉ to_in6_addrÁÉ
from_in6_addrÁÉto_mreqnÁɲ+РРɪ0Ó Ó É Öaccept4ÁÖ_accept4ÁØ Ö set_cloexecÁÖ _set_cloexecÁÖtcp_mssÁÜ Ö set_tcp_mssÁÖ is_listenerÁß ÖÖprotocolÁâ ÖmarkÁä Öset_markÁÖtcp_corkÁç Ö set_tcp_corkÁÖ tcp_quickackÁê Öset_tcp_quickackÁÖtcp_thin_linear_timeoutsÁí Öset_tcp_thin_linear_timeoutsÁÖtcp_notsent_lowatÁð Öset_tcp_notsent_lowatÁÖdeviceÁó Ö bind_deviceÁõ Öbind_device_by_index_v4ÁÖbind_device_by_index_v6ÁÖdevice_index_v4ÁÖdevice_index_v6ÁÖ cpu_affinityÁû Öset_cpu_affinityÁÖ
reuse_portÁþ Öset_reuse_portÁÖ freebind_v4Á Öset_freebind_v4ÁÖ freebind_v6Á Öset_freebind_v6ÁÖsendfileÁÖ _sendfileÁ Öset_tcp_user_timeoutÁ Ötcp_user_timeoutÁ Ö
attach_filterÁÖ
detach_filterÁÖcookieÁÖ tclass_v6Á Ö
set_tclass_v6ÁÖtcp_congestionÁ   Öset_tcp_congestionÁ Öset_dccp_serviceÁÖ dccp_serviceÁÖ
set_dccp_ccidÁÖ dccp_tx_ccidÁÖ dccp_xx_ccidÁÖset_dccp_server_timewaitÁÖdccp_server_timewaitÁÖset_dccp_send_cscovÁÖdccp_send_cscovÁÖset_dccp_recv_cscovÁÖdccp_recv_cscovÁÖset_dccp_qpolicy_txqlenÁÖdccp_qpolicy_txqlenÁÖdccp_available_ccidsÁ¨Ÿ¨ Ö dccp_cur_mpsÁÖ busy_pollÁÖ
set_busy_pollÁÉ
SockFilterÁ®filterÁÉ
°æ É ²×É ´Ÿ´å´´É
¸as_fdÁɺ as_raw_fdÁɼ÷ɾ into_raw_fdÁÉÀ÷É from_raw_fdÁ  
ÏIPV4ÁÏIPV6ÁÏUNIXÁÏ for_addressÁÔ÷Ö÷ØSTREAMÁØDGRAMÁØDCCPÁØ SEQPACKETÁØRAWÁÞ÷à÷âICMPV4ÁâICMPV6ÁâTCPÁâUDPÁâMPTCPÁâµTâSCTPÁâUDPLITEÁë÷í÷ ï is_truncatedÁÜ;ñ
ñš2ñˆ
õš2õ× øš2øæ  ûš2ûåû´
ÿš2ÿæ  with_timeÁ
with_intervalÁ with_retriesÁMsgHdrÁ'addrÁ'bufsÁ'controlÁÎ
_lifetimesÁÒWßWìWæ  with_addrÁ with_buffersÁ with_controlÁ
with_flagsÁ'nameÁßWìW× MsgHdrMutÁœÒWœßWœìWœÎœ„X¢ÒW¢ßW¢ìW¢æ ¢ºX¢ËX¢ßX¢flagsÁ¢ control_lenÁ¬‰Y¬ßW¬ìW¬× man_linksÁSockAddrÁ³³
ƒUInterfaceIndexOrAddressÁ¸IndexÁ¹
¹ˆ¸AddressÁ¼
¼ˆU
¿×U U U
ÃUÅ÷UÇ÷UÉ÷UË÷UÍ÷UÏ÷ÉÑ×ÉÓ×ÉÕ×É
CcidEndpointsÁ×Ÿ× endpointsÁÙ ×lengthÁÉÜŸÜ Ü×Éà÷Éâ÷Éä÷Éæ÷Éè÷Éê÷DomainÁì
ìˆñƒóÖöóø
øˆýƒÿÖ ProtocolÁ
ˆ!"#ƒ$Ö%&Ž RecvFlagsÁ
ˆ'()ƒ*Ö+,š TcpKeepaliveÁœtimeÁœintervalÁœretriesÁ- ×.¢ƒ,
-
0
0
0
:
;
<
=
>
@
A
B
C
D
E
F
N
N
N
P
P
S
S
}




ˆ
ˆ

Š


Ž














˜
˜
˜


š
š


œ
œ
œ



ž
ž
Ÿ
 
 
 
 
 
¡
¡
¢
¢
£
£
£
¤
¤
¤
¥
¥
¦
¦
¦
§
§
§
¨
¨
¨
¨
©
©
©
©
ª
ª
ª
ª
ª
®
°
±
²
´
µ

·
¹
º
¼
½
¿
À
Â
Ã
Ä
Å
Ç
È
Ê
Ë
Ì
Ð
Ò
Ó
Õ
Ö
Ö
Ö
×
×
×
Ø
Ø
Ø
Ù
Ù
Ù
Ú
Ú
Ú
Ú
Û
Û
Û
Û
Ü
Þ
ß
à
à
á
ã
ä
æ
ç
é
ê
ë
í
î
ð
ò
ô
õ
÷
ø
ø
ù
ù
ú
ü
ý
ÿ


ƒ


ˆ


Œ
Ž








š
œ
ž
ž
Ÿ
Ÿ
Ÿ
£
£
¤
¤
¤
§
§
¨
¨
¨
©
¬
¬
­
­
­
®
°
°
°
Â
Ç
È
È
È
ß
ß
ß
ë
ì
í
î
ð
ð
ñ
ò
ó
ô
õ
ø
ú
ü
þ
þ
ÿ
ÿ



Š



¤
¦
«
«
¬
¬
®
®
®
®
°
²
²
³
³
µ
µ
µ




¾
Ë
Í
Ï
Ï
×
Ø
Ú
Û
Ü
Þ
ß
á
â
ä
æ
ç
é
ê
ì
í
ï
ð
ò
ó
õ
õ
÷
ø
ù
ú
û
ý
þ


ƒ

















œ

ž
Ÿ
 
¡
¢
£
¤
¥
¦
§
¨
«
¬
­
³
³
³
·
¹
»
÷
÷
÷
þ


š
š
š



¨
ª
«
°
°
°
±
±
±
·
À
À
À
Ä
Ò
Ò
Ò
Ô
Ô
Ô
Ö
Ö
Ö
ß
ß
ß
ò
ô
÷
÷
þ

ƒ
ƒ
Š
Œ



˜


¡
¡
¡
£
¿c((ï)j:1oªJõس³ýZ´µG·ÌT>:ÝéÛr“¼”¼•¼V4Á–¼ˆ—¼˜¼V6Á™¼ˆ cÌ£•éÛrª¼ª¼ SocketAddrV4Á«¼ipÁÑS¬¼portÁÑSµÃѨbF(ÆéÛr½¼½¼ SocketAddrV6Á¾¼œsÑS¿¼«sÑSÀ¼flowinfoÁÑSÁ¼scope_idÁÑS¸dÛÔ#¹G[¿cÛrµßÛrÛrÛršeÛr¿c¸¹ºÇ[»ˆ¼½á[¾ˆä9h¬ŒûÉŠ ûuÛûuØûuà yyÁzÎUá@¶|"à  š2èvŸ!èvŸ!™w¿cèvéèv‡#‡#ˆ# TcpStreamÁ‰#ˆô" ¤‰?ßøéèvŠ#Š## TcpListenerÁŒ#ˆô" N À];óÉéèvð#ð#ñ# UdpSocketÁò#ˆà# ¬ãøàFð™éËwèvéxèvé×xèvé!»»Ø3½¨±¾ù3±;N3”øNF>ç3éÀy ç3¤¿c»»Ø3½¨±¾ù3±;N3”øNF>8¿cììí´^îˆ UÎðd¥<õ¿cøøùóúˆ *#à‹¿cÂ_ˆ è
E8¸âÒÆ¿cŽ`ˆ ß
ÄK8¯ÌìààÜ;âÁÉãù3ÉóëK‚4ûìÏš2 Å|¿c®®ÎQ¯àQÉ8èiÒ"弿c×׌]Ù©]ÉÛ¿]Éê/œÃ ÷@NŸé!Ë},èv«+èvéö+ö+OwnedFdÁ÷+fdÁä+Þí¼>XG¸,èv¯+èvéèv°~­+èvéèv­(­(®(
UnixStreamÁ¯(ˆê% ×¶'™g$²éèvã'ã'ä' UnixListenerÁå'ˆË' Nó:xÔ§eöéèv''“' UnixDatagramÁ”'ˆñ& ÒÛ0É@ßhéèvéÛèv飀èvŠ äzÛäzØäzäzÐìäzµßäzäzéäzéäzŠ œ{Ûœ{Øœ{œ{Ðìœ{µßœ{œ{éœ{éœ{Š Ô{ÛÔ{ØÔ{Ô{ÐìÔ{µßÔ{Ô{éÔ{éÔ{Š Œ|ÛŒ|ØŒ|Œ|ÐìŒ|µßŒ|Œ|¿cññòÜ;ôˆ ·j
;nŒâš2é!âƒö!⃿cœœÛ`ï`žû`Ÿ‹a›2n?ض„¿cÄWÎŒ„XÖ
ŒNGEN‰YßWìWÌìÄWÎŒ„XÖ
ŒNGEN888¿cœœ±Y Î¡„XdpŽ]S³‰YßWìWÌ윜±Y Î¡„XdpŽ]S³888/(M³¿¸¯»ÑìÓøÕÞ²®Ü×õñ œ¬œ³Ã¸ñìýø¢œG³I³K³Å‡#ÍŠ#Ïð#û¼ö+À­ã'êìÖÞøàëíO³öìøŽšQ³óìÿøR³Á¸ïìûøÂ¸ðìüøˆ
¦
¿»´×ûñä౜æà¸ìøÿñ¿cÀØeé1µß˜"še"Š Û#à #Ÿ! é! Ìì ,«+¯+­+Ðìö!|%sockaddr_storageÁ ss_familyÁ __ss_pad2Áà 
__ss_alignÁà 5;TnìÈD4„±%±%üï$] ³ Ë%Ò%2ü—$»ÛrDÜ$ªr<¯$É$ü$(Sìð3
Üð3
À+üð3* ™4üÐ3K6Lä3n+´†>¢>;üÒ=P\ð= Ûr,æ= /ü‡?´‡?& ¥?ü€?' ì ¦?­?<üÑ>\äz4ï>â,å>;D•@£@=üæ?=L@â,÷? -ü–A(lAü–AB ªr ×A ÝAÞA>ü×@‡Ø“´õ@â,ë@   DdòBüËB> ( ˆCC?üBªr|±BÛr$¨Bh4´œD´¶D<¶DüœD0 ËDÒD@üîCd$Dâ,ƒDy:´èE¼‚FD‚FüèE1 ˜FŸFAüºEe$ÙEâ,ÏEy:•æšæ lšæ

Dæ
Ø4Tæ ¦æç ç‘ç«üàâ±ü‘æœ{$†ãœ{ùâœ{®œ{¬´´ÌUœéÕtéÕ ! ûÕ@!$‡Ö Û¼­Ö­ÖDurationÁ®ÖsecsÁâ}¯ÖnanosÁâ}Zµ–²ªüæÕr˜ü¦Ö+´ºÖ|ºÖ ! ÏÖB
Iœ¦Ö
€~Ug ÐÖü¡Ö1 Û¼ › ÑÖ­ ×ÖÚÖÍü¢Õ¸Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ›„ÏÕ» » û"¼ l_onoffÁ½ l_lingerÁ™»p·Æ¸Š4·Õ32 ywvû"5ßD¨×t¢×$ü½ØH »  àØ ùØ9DÀ× Û ›¼‰Ø ”‰ØD‰Ø 
%<’Ø
Œ~2L’Ø šØbp ŸØüÍ×^ »  ð× ªØ ŽÙÎüÜÖ²ü»×p¡ž\×ÑDñÖt»× ›8!)"  %durationÁLÿ¡}¬ÑPdÑP­Íü¶P1Ï,ÉP%<­Í16Á¼‡a ì|ŽaŸüì`3Óäz4þ`%9Ÿ´Üb ìtãb¡@üÂb1Ôäz4Ób%9¡@äˆj4ˆj
œ‘j„@ £jüƒj" ø ¤j«jÖüÒiYœ{$ôiœ{$ëi:„@$ìn|ìn
 Dñn/Tñn úno×ü¿nBœ{$Ýnœ{$Ônœ{w3ÜÅr4År
”Îrü  ßrüÀr! ø àrçrØü‹r\œ{$±rœ{$¨r:ü ´œ‡4œ‡ ! l¥‡à ±‡Üœ‡ ¶‡½‡Úüæ†W$Œ|$„‡ ž<à´í‰4í‰ ! lö‰Ú ‚ŠÜí‰ ‡ŠŽŠÛü¹‰U$Þ‰Œ|$Õ‰ ž<ÚÔ¼ ! ŒÅä Õü¼ ÚáÜüŒUŒ|¡Ÿ<ääñ ! œúÜ Œ‘üñ! ‘‘˜‘Ýü¿YŒ|¡Ÿ<ܤ»²|»² ! βD%¬Ó²„Ó² ! ç²D%$ó² Û¼ ›ü¸²ØR¸ ‘³|—³ ´—³ ¬³$»³̳ „ó
 
! 
 Ú³
ü³   $Þ³è#   $èE  á³ Äñ³ ÿ³
 
$„´ 1
8lñ³
ÿ}
E6 [ ˆ´ 
ôì³ Û¼ › ‰´ ´ ¦’´¹üï±£ü³ƒü·³YÑ„¡²ã
ã
timevalÁä
tv_secÁå
tv_usecÁ¶ïÔm†Ü¡•D…²ÍÌA@𠛜ÿ¡xsecÁ¡nsecÁvüóÛ!l†Ü$†Ü 
&4‹Ü
ØQ3D‹Ü ’Ü^
e”óÛ
­Òr “ÜüÙÛB è šÜÜËüðÙ­èèin_addrÁés_addrÁIyal'¸}<£Ú ¾º¾ºIpv4AddrÁ¿ºoctetsÁ¯Q5N`hzØÊ$Ú]iѺiaddrÁ8ÐlíÝ$íÝ 
&4òÝ
­R3DòÝ ùÝüÑÝ0 õ  €ÞƒÞÍüŽÝuõ õ in6_addrÁö s6_addrÁ{i_ùšÆ3DÂÝ ̺̺Ipv6AddrÁͺñ¹¯QÉ¢}ÝÏÆÚ$®Ý+¸½+ź- LÐâ|Êâ%Lå á[Óº¬ÇåLÒå 
&TÇå
Ë3DL’ã Ç[¬ÌãL×ã 
&TÌ㸿1B àãüüã"´‡ä  ÏѺ% 2 I
PTü㸿Zl ä|¹ä   T¹ä
 
$ 
2 Çä
ü ã³ ù Òä    !) Ûå¬÷åL‚æ 
&T÷帿1B ‹æü›å˜ ù §æ ²æ ¼æÏüÀáüüäâïüÝäÖùùip_mreqnÁú
imr_multiaddrÁû imr_addressÁü imr_ifindexÁ6x%!Ó³tµâѺLâá ûuLüáüäâ8 î’º×Ѻ×’ºšѺѺ¢Óº¬ˆäFNGѺ°’º˜Ѻ˜’ºÜѺÜѺû multiaddrÁ¿ interfaceÁÈàŬàÅ"£ÖQÓº¸ÀÖQÓºxÏÓѺ¤ÓºµÖQÓºlibc::IFNAMSIZÁTCP_CA_NAME_MAXÁTCP_CA_NAME_MAXÁü…ƒ%$™ƒ Ÿƒ £ƒ  §ƒ  Z ¹ ©ƒ  üä‚Q ® ´ƒ»ƒ±ü˜‚£
–}TÏ‚$©‚´‚¼‚ Ä‚¹¹ sock_filterÁºcodeÁ»jtÁ¼jfÁ½
v®ø·^\PD8ʪªÊ®µÊ²µ÷¤Î@ ìdÕ@üµ@.Ðäz4Å@%9¬ÆA ìlÍAü­A/Ñäz4½A%9¤éB ìdðBüÐB.Òäz4àB%9<þCløC"dØD
Ñäzd©D
ÐäzõDÓü¶C¿äz4çCs<ÏCŒ”D˜7lÐäzÑäz´²K ø„·KÃHü™K0Ùœ{$«K%9ÃH¬ÃL ø|ÈLÄHü«L.Úœ{$¼L%9ÄH¤ƒN øtˆNœ@üìM,Ûœ{$üM%9œ@ÌìO øœñO›@üÐO6Üœ{$åO%9@œR øl¢Ríü‡R*Ýœ{$R%9íÜãW ŒìWËüÆW9ãÔ{DØW%9ËìòX œûXÌüÕX;äÔ{DçX%9ÌÔÙY „âYÍü¿Y5åÔ{DÎY%9ÍÔ½Z „ÆZÎü£Z5æÔ{D²Z%9ÎäÅ[ ”Î[ü©[9çÔ{Dº[%9Üã\ Œì\£üÈ\7èÔ{DØ\%9£Üœ^ Œ¥^°ü^7éÔ{D^%9°ôÚ` ¤ã`²ü¼`=êÔ{DÏ`%9²¼Øi4Øi táiÞ îiäØi óiúiðü¦iT$ÉiŒ|$Ài9Þ
$§z Û¼ ›$š} Û¼ ›$Œ€  Û¼ü†z• œ š€ ¡€ƒüÙyȶ„dïyѺѤۼݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÒuT”…$™…  Û¼ › üû„A œÑ”Þ »…Â…ü¼„¶„$ì„¶„$Ó„ ›$لѵ ›´'ï`)ZtôŒDùŒ  Û¼ › ü׌I œÑ”Þ Ÿ¦üŒ¶„$ÈŒ¶„$«Œ ›D±ŒÑµ ›´'û`)Zl”<Ç”  Û¼ Δü¦”G œÑÑ ì”ó”üæ“¶„$—”¶„$€”<†””Þ³±%a(X,Æü ¸º&ûu18?<ƒý ¸½&ûu1Óº9@ŒÅ? ìí%äz07>|“J øù%œ{07>œÅV %Ô{07>¤Öe %Œ|07>ü‹k ñò(ññòÜ;ôˆ ·j
;nŒâcààÜ;âÁÉãù3ÉóëK‚4ûìÏ£ªÉñòœìíœøùÀײ¤,IoSliceÁ<•æL PhantomDataÁ\€Šéíçë MaybeUninitÁ\úÑÛ
SocketAddrÁT•“¼r,°é!
DerefMutÁD·ö! ¬š­Ö c_intÁ,Ê7¿¬ÄüÝ\å7'ÆÍLò7&ÇýZDý7³Èï|‡8(ɨ[¼×9¸ÊÁ4€:yËØ3<™:»ÌŒ]lá:×ÍÎQTË;®Îüáâ½üˆ-* Utilities for creating and using sockets.ÁúüºGD The goal of this crate is to create and use a socket using advancedÁü‚KH configuration options (those that are not available in the types in theÁüÎ41 standard library) without using any unsafe code.Áƒúü‡DA This crate provides as direct as possible access to the system'sÁüÌB? functionality for sockets, this means little effort to provideÁüMJ cross-platform utilities. It is up to the user to know how to use socketsÁüÝJG when using this crate. *If you don't know how to create a socket usingÁü¨HE libc/system calls then this crate is not for you*. Most, if not all,ÁüñIF functions directly relate to the equivalent system call with no errorÁü»PM handling applied, so no handling errors such as [`EINTR`]. As a result usingÁüŒ PM this crate can be a little wordy, but it should give you maximal flexibilityÁüÝ " over configuration of sockets.Á
úü„
.+ [`EINTR`]: std::io::ErrorKind::InterruptedÁ³
ú
 # ExamplesÁÆ
ú

```no_run矯
(% # fn main() -> std::io::Result<()> {Áü ,) use std::net::{SocketAddr, TcpListener};Áü® (% use socket2::{Socket, Domain, Type};Á× úüÛ 41 // Create a TCP listener bound to two addresses.Áü @= let socket = Socket::new(Domain::IPV6, Type::STREAM, None)?;ÁÑ úüÕ  socket.set_only_v6(false)?;Áüõ =: let address: SocketAddr = "[::1]:12345".parse().unwrap();Áü³
" socket.bind(&address.into())?;ÁÄÖ
 socket.listen(128)?;Áï
úüó
.+ let listener: TcpListener = socket.into();Á // ...Á¬­ # drop(listener);Á # Ok(()) }Á ```ÁÚú ## FeaturesÁîúüòPM This crate has a single feature `all`, which enables all functions even onesÁüÃ&# that are not available on all OSs.Át•ÉñòœìíœøùÀ× ×Ø ¤,ðèÑ æLŠéÆ ŠéÙ íÆ ëÏé» ÑÛîé± “¼r° é!
žê¨ ö! ¬š§ ­Ö Îê¢ ¿¬ÄüÝ¡ 'ÆÍ  &ÇýZŸ ³Èïž (ɨ[ ¸ÊÁœ yËØ3»ÌŒ]š ×ÍÎQ®ÎR U X D­O „Œ< Äó%  ¬ðî
¤‹×
Ë
Î

¹
œÆ¬
¼ª  ä È  , Œ8!$& 8õ
$“$ , ¡ ¢  , ° ± Â+ ² ³ Á, ´8ê& »8û
Ã, ê8& ï8¼'÷, ú8flagÁ& ÿ8¼,$  ,   $ 
*Ÿ ¢ á
88À±'´8×'¹8p8
Á, Å8! Ë Û
8 Ù8×Ü ß  à8$ å8± ç& è ê8ë8Àï'ò8×ô'÷8ˆ :8ƒ (ˆ8À'Ž8×'8Í4• œ Ñ
8®8stringÁ ¹88 Å7ˆ Æ È ž
, Þ ß Ù
, ù ú + û ü , ý8ê
,  8'¦, ©8Ò*¯8Ô » ¼ Â, ½8Ò$ à Ú8¹ ð*ò88½2   8± ƒ$ 7{n}Á,†$ Œ% Ÿ8± ± ²8ñ ¼ Ã8ˆ…% ⌞ ° Ž"  Ê , ·8÷$¸& ¼8´¾$ À, Â8
Ã& Æ8´È*Ì Ï "
88Š â, ã8÷ è8
ê, î8
ï ó …"8 8÷$„ ˆ 8¨4‰& , 8÷$(˜, 8
œ   û!+ ² ³ ó8â´ · ò8º¸ » ñ8ú$ À8£Â Å ð8ú Ð7$ Ø8
Ú Ý ï8î é78"4…  Œ  Ü  ¢ , £ 8
¤  § '¨ 8„S µ  Ê 8¨ ¼ 8ßR È  É + î  ï  ü 8âð  ó  û 8â8"4Ž! •! í! «!, ¬!8
­! °!'±!8from_raw_socketÁ|³! Â! Û!8¨4Ã! É!8into_raw_socketÁ|Ê! Ù! Ú!% Œ"dé4Dí4&'(³Ž$šeŽ eí$$ëš<* ÀîéTC“¼†sdOª¼àsd]½¼PathÁ$›…0׫¤,ioÁ°¦µ ´AF_UNIXÁ<¹ ýÎ꿬ü sockaddr_inÁ\Ú˜  sockaddr_in6Ádç¥!ŠŒ„õ"AF_INETÁ<‡ #ÿAF_INET6ÁD $´^4¦ì%´^í%|ÎD°¤§D8šƒ|s¥gjX[KNœ­;), ïñÛÝÁÃ¥§lŸ•”ü¯>; The integer type used with `getsockname` on this platform.ÁL¤šüº@= The integer type for the `ss_family` field on this platform.Á\£Ô¤üË2/ Rust version of the [`sockaddr_storage`] type.Áþúü‚a^ This type is intended to be used with with direct calls to the `getsockname` syscall. See theÁüä41 documentation of [`SockAddr::new`] for examples.Áúü^[ This crate defines its own `sockaddr_storage` type to avoid semver concerns with upgradingÁ”ü `windows-sys`.Áªrj:1oªJõ)ÌÅ((¤ãªr+,-¼Â üþ1. Construct a new storage containing all zeros.Á4É ªr**
+üõ
"ü½
%" Returns the size of this storage.Á<ü
¤ ¤ªr* *
,$… üó-üÌ # View this type as another type.Áô ú # SafetyÁ úü• PM The type `T` must be one of the `sockaddr_*` types defined by this platform.Áê ú çô<…
£úÌ‘
 # #[allow(dead_code)]Áü¯
%" # #[cfg(unix)] mod unix_example {ÁìÙ
 # use core::mem::size_of;Áüû
 use libc::sockaddr_storage;ÁüŸ85 use socket2::{SockAddr, SockAddrStorage, socklen_t};ÁÜúüäKH fn from_sockaddr_storage(recv_address: &sockaddr_storage) -> SockAddr {Áü´41 let mut storage = SockAddrStorage::zeroed();ÁüíLI let libc_address = unsafe { storage.view_as::<sockaddr_storage>() };Áü¾&# *libc_address = *recv_address;ÁüéUR unsafe { SockAddr::new(storage, size_of::<sockaddr_storage>() as socklen_t) }Á # }Á£ú<¥ ¥ªr ¥¥*¥.. Œ*Í쥣 
-¥£$‘ü¦(ªr0Àc0üÕBئ§¨ ¦ªr § c cˆ¢cµ
 `£cbufÁ `àB¤GS
¨Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ ÈErrorÁ O˜éBL/ Ü/
0± ãÛr238:;<=>?@ABCDEFü—$MüôC@ Create a `SockAddr` from the underlying storage and its length.Á¼úÈ›ÕúüÝKH Caller must ensure that the address family and length match the type ofÁü­KH storage address. For example if `storage.ss_family` is set to `AF_INET`ÁüýKH the `storage` must be initialised as `sockaddr_in`, setting the contentÁìÍ and length appropriately.ÁïúçôŠú<’£úüž(¡õ¤Ë # #[cfg(unix)] {Á„ä
use std::io;Áìù use std::os::fd::AsRawFd;Áúü£C@ use socket2::{SockAddr, SockAddrStorage, Socket, Domain, Type};Áëúüó@= let socket = Socket::new(Domain::IPV4, Type::STREAM, None)?;Á¸úüÀ=: // Initialise a `SocketAddr` by calling `getsockname(2)`.Áü‚52 let mut addr_storage = SockAddrStorage::zeroed();Áü¼)& let mut len = addr_storage.size_of();ÁêúüòEB // The `getsockname(2)` system call will initialize `storage` forÁü¼ /, // us, setting `len` to the correct length.Á´ð  let res = unsafe {ÁÔ‹! libc::getsockname(Áüª! socket.as_raw_fd(),ÁüÎ!# addr_storage.view_as(),Á¬ö! &mut len,ÁL"4ž" };Á”©" if res == -1 {ÁüÀ"/, return Err(io::Error::last_os_error());Á,ô"Ï¡þ"úü†#>; let address = unsafe { SockAddr::new(addr_storage, len) };Á¤É# # drop(address);Á<â#Ý¡dî# # Ok(())Á<ÿ#Ý¡<$£ú«$ªrÛr11
2ÕFÞFü«2üØ%;8 Initialise a `SockAddr` by calling the function `init`.Á˜&úü &LI The type of the address storage and length passed to the function `init`Áüñ&  is OS/architecture specific.Á'úüž'FC The address is zeroed before `init` is called and is thus valid toÁüé'KH dereference and read from. The length initialised to the maximum lengthÁœ¹( of the storage.ÁÑ(údÙ(È›ê(úüò(Kó¦üÂ)Kȧü’*K¨ìâ*ñ¨„+útŒ+çôŸ+ú<§+£úü³+(¡õ¤à+ש„ù+ô©ìŽ,ª°,úü¸,2/ use socket2::{SockAddr, Socket, Domain, Type};Áï,úü÷,@™«¼-úüÄ-=ï«ü†. let (_, address) = unsafe {Áüª.0- SockAddr::try_init(|addr_storage, len| {Áüß.MJ // The `getsockname(2)` system call will initialize `storage` forÁü±/74 // us, setting `len` to the correct length.Áüí/VS if libc::getsockname(socket.as_raw_fd(), addr_storage.cast(), len) == -1 {ÁüÈ0/, Err(io::Error::last_os_error())Á¤ü0 } else {Á´•1 Ok(())Ál°1
TÂ1 })Á<Ñ1 }?;Á¤Ý1DZ<ö1Ý¡d2ñ±<“2Ý¡<Ÿ2£úD¹2Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¥Ûrßßþ¤à ¬
ÑøÿËO Ÿ14¥5541Í좾 Â2Íì÷¾ Å2–"¢¾ ªr üƒ3=¢¾„À˜"Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
÷¾ÿ¾l³3
3¢¾÷¾initÁ$È2²´®°ìÐ3dÖ3,·73<closure_kind>Á7<closure_signature>Á7<upvars>Á7737¢¾÷¾÷¾õ¾µÅªrü:QüÑ8LI Constructs a `SockAddr` with the family `AF_UNIX` and the provided path.Á¢9úüª9:7 Returns an error if the path is longer than `SUN_LEN`.Áú”ó9¤ò9üé9$”:¡Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ûrÿ¾1¡991ÍìµÄ ™:àµÄ…0…0†0Îß-bªŸðcÂ^\Ò:
8µÄõ
$œ:SUüÌ<6ü¡;" Set the length of the address.ÁÈ;údÐ;È›á;úüé;IF Caller must ensure that the address up to `length` bytes are properlyÁ„·<
initialised.ÁTÚ<© ©Ûr1 å<1
:$ê<¿]4ð<üÒ=)ü«=" Returns this address's family.Á4ß=ª ªÛr1 æ=1
;$ç=üÑ>$ü¨>$! Returns this address's `Domain`.Á4Þ>« «Ûräz1 å>1
<$æ>üæ?$ü³?.+ Returns the size of this address in bytes.Áó?¬ ¬Ûr1 ÷?1
=$ø?ü×@4ü©@)& Returns a raw pointer to the address.Á4ä@­ ­ÛrØ“1 ë@1
>$ì@üB0üäA'$ Returns the address as the storage.ÁTBÛrªr11
?-JüîC#ü•CTQ Returns true if this address is in the `AF_INET` (IPv4) family, false otherwise.Á<ûC® ®Ûr1 ƒD1
@$„DüºE#üØDJG Returns true if this address is in the `AF_INET6` (IPv6) family, falseÁt§E otherwise.Á<ÇE¯ ¯Ûr1 ÏE1
A$ÐEìéGü¥F\Y Returns true if this address is of a unix socket (for local interprocess communication),Áü†G:7 i.e. it is from the `AF_UNIX` family, false otherwise.Áú”ÏG¤ÎGüÅG<ðG° °Ûr1 øG1
B$ùGüÜI-üÍHKH Returns this address as a `SocketAddr` if it is in the `AF_INET` (IPv4)ÁüI:7 or `AF_INET6` (IPv6) family, otherwise returns `None`.ÁLãI± ±ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙs1 íI1
C$îIüçT4üŠTHE Returns this address as a [`SocketAddrV4`] if it is in the `AF_INET`Á\×T family.ÁtîT² ²ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙús1 ýT1
D$þTüÿV4ü¡VIF Returns this address as a [`SocketAddrV6`] if it is in the `AF_INET6`Á\ïV¶Ôt†W³ ³ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÔt1 •W1
E$WÜèXDëX´ ´Ûr ´
1 ôX1
F$õXü¬["ÛrHëHüÕ[%$Ø[sÛrGG
Hź$Ý[ü‡]$ÛrJëJü²]'$µ]úsÛrII
Jź$º]üƒg$ÛrLëLü®g'$±gÔtÛrKK
Lź$¶gä”sÛrNÀcNü·s:ºsµ· µÛr  c cˆ¢cµ
 `£cõ£ `àB¤GS
·œ¥M ¾sM
N$¿s×ÅsÜ©yÛrP·ßPüËy"Îy¸¹ ¸Ûr ¹ÛrO ÑyO
P$Òy¹
,Øy¤¥zÛr´¾zÛrSeSüÛz3$Þzº» ºÛr »RTT ùzRÍìåÞ ãz¢eåÞŒæz
SåÞ$úzº,€{+-T÷44û4¬Íθ×ê¤,UVì¦UXReadÁ$ƒà UYWriteÁ,‰Ÿ!UZðèæLU\
IoSliceMutÁTùö U]Ïé\”ÑÛU^Ƽ̺U_netÁ$çž"Uaß¹¾ºUbShutdownÁD÷¶MUc FromRawFdÁL×­+Ue IntoRawFdÁLâ¯+Uf¬š­ÖUgÐ4$ãÉUiÎ꿬Ujü×DTð ÅUköDTü ÈUlX$ˆÌUm±YLâœUn´^4ùìUp´^íUpÂ_DUqÂ_UqýZD³UrÈÛ`d•œUsóøUtóùUtÜ;„‡ ñUvÜ;òUvÄW4™ UwŽ`L¡ UxŽ`UxDå·ªøšˆ~gj¬Š]”ÄO?á25

ô÷œ¼êÝÝÐÓ¾Á±´¥¨„ÛœpsPS?B25,ÿöøçéŒàü® )& Owned wrapper around a system socket.ÁØ úüÜ MJ This type simply wraps an instance of a file descriptor (`c_int`) on UnixÁüª
MJ and an instance of `SOCKET` on Windows. This is the main type exported byÁüø
HE this crate and is intended to mirror the raw semantics of sockets onÁüÁ FC platforms as closely as possible. Almost all methods correspond toÁüˆ IF precisely one libc or OS API call which is essentially just a "RusticÁüÒ ! translation" of what's below.Áô úüø )& ## Converting to and from other typesÁ¢
úü¦
MJ This type can be freely converted into the network primitives provided byÁüô
KH the standard library, such as [`TcpStream`] or [`UdpSocket`], using theÁüÀ*' [`From`] trait, see the example below.Áëúüï&# [`TcpStream`]: std::net::TcpStreamÁü–&# [`UdpSocket`]: std::net::UdpSocketÁ½ú # NotesÁÍúüÑMJ Some methods that set options on `Socket` require two system calls to setÁüŸKH their options without overwriting previously set options. We do this byÁüëNK first getting the current settings, applying the desired changes, and thenÁüºPM updating the settings. This means that the operation is **not** atomic. ThisÁü‹NK can lead to a data race when two threads are changing options in parallel.ÁÚúçôŠõüû(¡õü¤,ÓõüÑ(‰öúúäþ // create a TCP listenerÁü›@…÷Üúüà=„øüž! let address = address.into();ÁÜÀ socket.bind(&address)?;ÁÄÜöøõúüù.¤ùÛù¬³îùŒú£úèvá@¶|"z”øUyy°~\èv|}~ƒˆŠŽ˜šœžŸ ¡¢£¤¥¦§¨©ªüÆ5èv{{
|@Ýü’-4 ¼ ¼èv{ §{
}üõ.èv{{
~üÁ"VüÚ/, Creates a new socket and sets common flags.ÁŽúü–HE This function corresponds to `socket(2)` on Unix and `WSASocketW` onÁ Windows.ÁôúüüJG On Unix-like systems, the close-on-exec flag is set on the new socket.ÁüË IF Additionally, on Apple platforms `SOCK_NOSIGPIPE` is set. On Windows,Áü™!'$ the socket is made non-inheritable.ÁÅ!úüÍ!LI [`Socket::new_raw`] can be used if you don't want these flags to be set.Áø3Ç#Ÿôž" 
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=socket&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=socket&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/socket.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socket.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/socket.2>
* OpenBSD: <https://man.openbsd.org/socket.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socket.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/socket>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket>
ÁÈ"äzœ{Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÔ{Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
èvÿ¾{{
4Ì"´Ü"®GDæ"üï%Zü”$0- Creates a new socket ready to be configured.ÁÉ$úüÑ$H²÷üž%LI Windows and simply creates a new socket, no other configuration is done.Á<ö%äzœ{¥‚ì‚{{
4þ%´Ž&®GD˜&ö&àÀøÀ•ÁÔ{üÇ*€üÏ'@= Creates a pair of sockets which are connected to each other.Á”(úüœ(1. This function corresponds to `socketpair(2)`.ÁÒ(úüÚ(EB This function sets the same flags as in done for [`Socket::new`],Áü¤)JG [`Socket::pair_raw`] can be used if you don't want to set those flags.ÁøHÅ%hüó)(ã
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=socketpair&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=socketpair&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/socketpair.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socketpair.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/socketpair.2>
* OpenBSD: <https://man.openbsd.org/socketpair.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/socketpair.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/socketpair>
Á»£|ª*ú$»*¼©*ü *"$Î*äzœ{¥‚Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
èvèvÿ¾{{
4Ü*´ô*®GD†+üÂ.„ü˜-@à…Ý-úüå-1¶†»£|¥.ú$¶.¼¤.ü›."DÉ.äzœ{¥‚Ï{{
ƒ4Û.´ó.®GD…/ó/ƒàÀøÀ•ÁƒÀ†DÀ0ƒàÀøÀ•Áƒü¿28ü€1/, Binds this socket to the specified address.Á´1úü¼1KH This function directly corresponds to the `bind(2)` function on WindowsÁlŒ2
and Unix.Áø`Ç#Ÿäž2Ž
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=bind&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=bind&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/bind.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/bind.2>
* OpenBSD: <https://man.openbsd.org/bind.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/bind.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/bind>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-bind>
Á$Æ2½¾ ½èv ¾ÛrÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÿ¾{ Ë2{
$Ì2˜<Ò2üÊ:;ü¯3B? Initiate a connection on this socket to the specified address.Áö3úüþ3FC This function directly corresponds to the `connect(2)` function onÁ¬É4 Windows and Unix.Áã4úüë4GD An error will be returned if `listen` or `connect` has already beenÁÜ·5 called on this builder.ÁøxÇ#Ÿü×5©
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=connect&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=connect&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/connect.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/connect.2>
* OpenBSD: <https://man.openbsd.org/connect.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/connect>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect>
Áû5ú\ƒ6¥í“6úü›6A> When using a non-blocking connect (by setting the socket intoÁüá6KH non-blocking mode before calling this function), socket option can't beÁü±7EB set *while connecting*. This will cause errors on Windows. SocketÁüû7EB options can be safely set before and after connecting the socket.ÁÅ8úüÍ8KH On Cygwin, a Unix domain socket connect blocks until the server acceptsÁü9HE it. If the behavior is not expected, try [`Socket::set_no_peercred`]Á”ê9 (Cygwin only).Á<Ñ:¿À ¿èv ÀÛrÖ›{ Ù:{
$Ú:˜<à:ü’CSüÀ;GD Initiate a connection on this socket to the specified address, onlyÁüŒ<FC only waiting for a certain period of time for the connection to beÁ„×<
established.Áì<úüô<JG Unlike many other methods on `Socket`, this does *not* correspond to aÁüÃ=KH single C function. It sets the socket to nonblocking mode, connects viaÁü“>JG connect(2), and then waits for the connection to complete with poll(2)Áüâ>GD on Unix and select on Windows. When the connection is complete, theÁü®?EB socket is set back to blocking mode. On Unix, this will loop overÁœø? `EINTR` errors.Á@út˜@ # WarningsÁ«@úü³@IF The non-blocking state of the socket is overridden by this function -ÁüALI it will be returned in blocking mode on success, and in an indeterminateÁ¬ÒA state on failure.ÁìAúüôAJG If the connection request times out, it may still be processing in theÁüÃBJG background - a second call to `connect` or `connect_timeout` may fail.Á|™CÁ Áèv ÂÛr ›Ö›{ ©C{
ˆ$ªCź$°CtimeoutÁ<ÁCüÅJ6üØGGD Mark a socket as ready to accept incoming connection requests usingÁ̤H [`Socket::accept()`].ÁÂHúüÊHEB This function directly corresponds to the `listen(2)` function onÁ¬”Iˆ®Iúü¶IG³Ü‚JƒžøÇ#Ÿô¢J 
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=listen&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=listen&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/listen.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/listen.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/listen.2>
* OpenBSD: <https://man.openbsd.org/listen.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/listen.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/listen>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen>
Á4ÌJÃ ÃèvÖ›{ ÓJ{
$ÔJbacklogÁ<ÚJüÑP6üµK85 Accept a new incoming connection from this listener.ÁòKúüúKDA This function uses `accept4(2)` on platforms that support it andÁüÃL&# `accept(2)` platforms that do not.ÁîLúüöLEý†üÀMLI [`Socket::accept_raw`] can be used if you don't want to set those flags.Áø¨Ç#Ÿô‘N 
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=accept&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/accept.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/accept.2>
* OpenBSD: <https://man.openbsd.org/accept.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/accept>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-accept>
Á´Nú\¼N¥íÌNúüÔNKÔ§ü¤OH©¨”ñOú¨4ØPÄ ÄèvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
èvÛrÿ¾{ ßP{
Š$àPüË\:ü¢[8Á¼ß[úüç[EB This function directly corresponds to the `accept(2)` function onÁ¬±\ˆTÒ\Å ÅèvŸÇ{ Ý\{
$Þ\|¯]àÀŒøÀŒ•ÁŒŒŒÛríÇüê`0üë]@= Returns the socket address of the local half of this socket.Á°^úü¸^JG This function directly corresponds to the `getsockname(2)` function onÁ¬‡_ˆøÀÇ#Ÿü¡_#Í
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=getsockname&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=getsockname&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/getsockname.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getsockname.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/getsockname.2>
* OpenBSD: <https://man.openbsd.org/getsockname.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getsockname.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/getsockname>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getsockname>
ÁÉ_ú\Ñ_¥íá_úüé_EB Depending on the OS this may return an error if the socket is notÁd³` [bound].ÁÄ`úÌÌ` [bound]: Socket::bindÁTñ`Æ ÆèvºÄ{ ü`{
$ý`üÀd/üÐaA> Returns the socket address of the remote peer of this socket.ÁbúüžbJG This function directly corresponds to the `getpeername(2)` function onÁ¬íbˆøØÇ#Ÿü‡c#Í
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=getpeername&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=getpeername&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/getpeername.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpeername.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/getpeername.2>
* OpenBSD: <https://man.openbsd.org/getpeername.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpeername.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/getpeername>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getpeername>
Á¯cú\·c¥íÇcúüÏc=: This returns an error if the socket is not [`connect`ed].Ádúü™d" [`connect`ed]: Socket::connectÁLÇdÇ ÇèvºÄ{ Ñd{
Ž$ÒdüŠf(ü¥eKH Returns the [`Type`] of this socket by checking the `SO_TYPE` option onÁ„õe
this socket.Á4fÈ ÈèvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
œ{ÿ¾{ ˜f{
$™füØk-üŸgFC Creates a new independently owned handle to the underlying socket.Áêgú\òg¥í‚húüŠhIF On Unix this uses `F_DUPFD_CLOEXEC` and thus sets the `FD_CLOEXEC` onÁÄØh the returned socket.ÁõhúüýhKH On Windows this uses `WSA_FLAG_NO_HANDLE_INHERIT` setting inheriting toÁTÍi false.ÁÜiúüäiDA On Windows this can **not** be used function cannot be used on aÁÜ­j QOS-enabled socket, seeÁüÍjb_ <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaduplicatesocketw>.Áú”¾k¤½kü´kLßkÉ Éèvì‚{ ék{
$êküèo-üÏlLI Returns true if this socket is set to nonblocking mode, false otherwise.Á mú\¨m¥í¸múüÀmFC On Unix this corresponds to calling `fcntl` returning the value ofÁŒ‹n `O_NONBLOCK`.Á¡núü©nGD On Windows it is not possible retrieve the nonblocking mode status.Á»£|ˆoú$¥oú”¯oîŒÇoœÆoü®o,ü¤o7üþncüõnn\ïoÊ ÊèvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÿ¾{ ûo{
$üoüØrBüËp63 Moves this socket into or out of nonblocking mode.Á†qú\Žq¥ížqúü¦qIF On Unix this corresponds to calling `fcntl` (un)setting `O_NONBLOCK`.ÁôqúüüqDA On Windows this corresponds to calling `ioctlsocket` (un)settingÁtÅr `FIONBIO`.Á|ßrË ËèvÖ›{ ïr{
$ðr
\örüäu7üásB? Shuts down the read, write, or both halves of this connection.Á¨túü°tHE This function will cause all pending and future I/O on the specifiedÁüýt=: portions to return immediately with an appropriate value.ÁøðÇ#Ÿü¿u ²
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=shutdown&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=shutdown&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/shutdown.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/shutdown.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/shutdown.2>
* OpenBSD: <https://man.openbsd.org/shutdown.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/shutdown.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/shutdown>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-shutdown>
ÁDëuÌ Ìèv¶M·M¸M‘ß¹MºM¨ß»M¼MBothÁlÏÏ‘£A2ÍÖ›{ ôu{
$õuhowÁûuü›~DüÓvFC Receives data on the socket from the remote address to which it isÁtžw connected.Á±wúü¹wHE The [`connect`] method will connect this socket to a remote address.Áü†x:7 This method might fail if the socket is not connected.ÁøˆÇ#ŸäÅxŽ
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=recv&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=recv&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/recv.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recv.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/recv.2>
* OpenBSD: <https://man.openbsd.org/recv.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recv.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/recv>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-recv>
Áæxúüîx  [`connect`]: Socket::connectÁ“yúd›yÈ›¬yúü´yGD Normally casting a `&mut [u8]` to `&mut [MaybeUninit<u8>]` would beÁü€zJG unsound, as that allows us to write uninitialised bytes to the buffer.ÁüÏzLI However this implementation promises to not write uninitialised bytes toÁü {FC the `buf`fer and passes it directly to `recv(2)` system call. ThisÁüë{HE promise ensures that this function can be called using a `buf`fer ofÁ¬¸| type `&mut [u8]`.ÁÒ|úüÚ|LI Note that the [`io::Read::read`] implementation calls this function withÁü«}KH a `buf`fer of type `&mut [u8]`, allowing initialised buffers to be usedÁÜû} without using `unsafe`.Á$¢~ÍÎ Íèv Î
ÑÛÑÛÏéÓÛuninitÁÝÔÛ»ÝÍõƒ«%9Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÿ¾{ §~{
$¨~õ£®~üÍ‚Pü’LI Receives out-of-band (OOB) data on the socket from the remote address toÁüãFC which it is connected by setting the `MSG_OOB` flag for this call.Á®€úü¶€?< For more information, see [`recv`], [`out_of_band_inline`].Áú€úÔ‚ [`recv`]: Socket::recvÁü¡63 [`out_of_band_inline`]: Socket::out_of_band_inlineÁú”³‚¤²‚ü©‚„Ô‚ÏÐ Ïèv Ю†÷†{ å‚{
$æ‚õ£ì‚ü÷„üÛƒLI Identical to [`recv`] but allows for specification of arbitrary flags toÁü¬„ the underlying `recv` call.ÁЄúÔØ„މ|þ„ÑÒ Ñèv Ò®†÷†{ —…{
$˜…õ£¦…¦Z,Ë…üùwü³†Fäöüþ†DA connected. Unlike [`recv`] this allows passing multiple buffers.ÁLJúüχH×÷üœˆ:©øÛˆúüãˆLI In addition to the number of bytes read, this function returns the flagsÁü´‰JG for the received message. See [`RecvFlags`] for more information aboutÁ¼ƒŠ the returned flags.Áø Ç#ŸüŸŠ©
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=recvmsg&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=recvmsg&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/recvmsg.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recvmsg.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/recvmsg.2>
* OpenBSD: <https://man.openbsd.org/recvmsg.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recvmsg.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/recvmsg>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-recvmsg>
ÁÊúÔËŠމüêŠ ›ÿúd—‹È›¨‹úü°‹KH Normally casting a `IoSliceMut` to `MaybeUninitSlice` would be unsound,Áü€ŒIF as that allows us to write uninitialised bytes to the buffer. HoweverÁüÎŒHE this implementation promises to not write uninitialised bytes to theÁü›KH `bufs` and passes it directly to `recvmsg(2)` system call. This promiseÁüëGD ensures that this function can be called using `bufs` of type `&mutÁ”·Ž [IoSliceMut]`.ÁÎŽúüÖŽGD Note that the [`io::Read::read_vectored`] implementation calls thisÁü¢JG function with `buf`s of type `&mut [IoSliceMut]`, allowing initialisedÁüñ.+ buffers to be used without using `unsafe`.ÁúredoxÁœ²ú”ÇúhorizonÁ¬Ûü±@ü­Eü¤Pl€‘ÓÔÕ Óèv Ô
ññòÜ;ôˆ ·j
;nŒâÕÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Œ|ÿ¾{ —‘{
$˜‘bufsÁ$¦‘ü˜ü­LI Identical to [`recv_vectored`] but allows for specification of arbitraryÁüþ’52 flags to the underlying `recvmsg`/`WSARecv` call.Á¸“úüÀ“,) [`recv_vectored`]: Socket::recv_vectoredÁñ“údù“È›Š”úü’”JG `recv_from_vectored` makes the same safety guarantees regarding `bufs`ÁÌá” as [`recv_vectored`].Áÿ”úü‡•,¶ úÀœœÆ•ú”Û•úßœ¬ï•üÅ•@üÁ•Eü¸•PÄ”–Öר Öèv ×
ññòÜ;ôˆ ·j
;nŒâØùž{ ¶–{
˜$·–ôž$Å–¦Z,ð–üé›Düê—Fäöüµ˜EB connected, without removing that data from the queue. On success,Áüÿ˜'$ returns the number of bytes peeked.Á«™úü³™JG Successive calls return the same data. This is accomplished by passingÁü‚š>; `MSG_PEEK` as a flag to the underlying `recv` system call.ÁÅšúd͚țޚúüæšEB `peek` makes the same safety guarantees regarding the `buf`fer asÁl°›
[`recv`].Á›úÔÊ›މ$ð›ÙÚ Ùèv Ú®†÷†{ õ›{
$ö›õ£ü›üÁŸUüìœJG Receives data from the socket. On success, returns the number of bytesÁü»30 read and the address from whence the data came.Áø¸Ç#Ÿüó ²
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=recvfrom&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=recvfrom&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/recvfrom.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recvfrom.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/recvfrom.2>
* OpenBSD: <https://man.openbsd.org/recvfrom.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/recvfrom.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/recvfrom>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-recvfrom>
Á˜žúd žÈ›±žúü¹žJG `recv_from` makes the same safety guarantees regarding the `buf`fer asÁlˆŸÖ§šŸúÔ¢ŸމLÈŸÛÜ Ûèv Ü®†Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ûrÿ¾{ ÒŸ{
š$ÓŸõ£ÙŸüý¡üΠHE Identical to [`recv_from`] but allows for specification of arbitraryÁü›¡,) flags to the underlying `recvfrom` call.ÁÌ¡úüÔ¡$! [`recv_from`]: Socket::recv_fromÁ¤„¢ÝÞ Ýèv Þ®†®³{ ¢¢{
$£¢õ£±¢¦Z,Ö¢ü‘¨üÊ£HE Receives data from the socket. Returns the amount of bytes read, theÁü—¤HE [`RecvFlags`] and the remote address from the data is coming. UnlikeÁüä¤74 [`recv_from`] this allows passing multiple buffers.ÁøÐÇ#Ÿü ¥ˆÄ¥úüÌ¥$Û´õ¥údý¥È›ަúü–¦J•¡Ìå¦é¡ƒ§úü‹§,¶ úÀœœÊ§ú”ß§úßœ¬ó§üɧ@üŧEü¼§P”˜¨ßàá ßèv à
ññòÜ;ôˆ ·j
;nŒâáÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Œ|Ûrÿ¾{ ´¨{
œ$µ¨ôž$èüÌ­§üÙ©GD Identical to [`recv_from_vectored`] but allows for specification ofÁü¥ªC@ arbitrary flags to the underlying `recvmsg`/`WSARecvFrom` call.Áíªúüõª63 [`recv_from_vectored`]: Socket::recv_from_vectoredÁ°«úd¸«È›É«úüÑ«J•¡Ì ¬é¡¾¬úüƬ,¶ úÀœœ…­ú”š­úßœ¬®­ü„­@ü€­Eü÷¬PìÓ­âãä âèv ã
ññòÜ;ôˆ ·j
;nŒâä²»{ ú­{
$û­ôž$‰®¦Z,´®ü͹Uü½¯FC Receives data from the socket, without removing it from the queue.Áˆ°úü°JÁ¥üß°B? `MSG_PEEK` as a flag to the underlying `recvfrom` system call.Á¦±úü®±GD On success, returns the number of bytes peeked and the address fromÁÌú± whence the data came.Á˜²úd ²È›±²úü¹²JG `peek_from` makes the same safety guarantees regarding the `buf`fer asÁlˆ³Ö§š³ú䢳 # Note: Datagram SocketsÁüóPM For datagram sockets, the behavior of this method when `buf` is smaller thanÁü˜´MJ the datagram at the head of the receive queue differs between Windows andÁüê´NK Unix-like platforms (Linux, macOS, BSDs, etc: colloquially termed "*nix").Á½µúüŵHE On *nix platforms, the datagram is truncated to the length of `buf`.Á’¶úüš¶IF On Windows, an error corresponding to `WSAEMSGSIZE` will be returned.Áè¶úüð¶^[ For consistency between platforms, be sure to provide a sufficiently large buffer to avoidÁüÓ·KH truncation; the exact size required depends on the underlying protocol.Á£¸úü«¸IF If you just want to know the sender of the data, try [`peek_sender`].Áù¸úÔ¹މü ¹(% [`peek_sender`]: Socket::peek_senderÁLÔ¹åæ åèv 殆®³{ Þ¹{
ž$ß¹õ£å¹üó¼1üæºFC Retrieve the sender for the data at the head of the receive queue.Á±»úü¹»IF This is equivalent to calling [`peek_from`] with a zero-sized buffer,Áü‡¼63 but suppresses the `WSAEMSGSIZE` error on Windows.Á¼úüʼ$! [`peek_from`]: Socket::peek_fromÁ\ú¼ç çèvºÄ{ †½{
Ÿ$‡½üâÁ^üÚ½>; Receive a message from a socket using a message structure.Á¾úü¥¾KH This is not supported on Windows as calling `WSARecvMsg` (the `recvmsg`Áüõ¾74 equivalent) is not straight forward on Windows. SeeÁü±¿˜ <https://github.com/microsoft/Windows-classic-samples/blob/7cbd99ac1d2b4a0beffbaba29ea63d024ceff700/Samples/Win7Samples/netds/winsock/recvmsg/rmmc.cpp>ÁäÑÀ for an example (in C++).ÁøèÇ#ŸüòÀˆú$ ÁúÀœœ®Áúßœ¬ÃÁü­Á,ü©Á1üŸÁ<ü–ÁG<éÁèéêëì èèv 霜±Y Î¡„XdpŽ]S³êëì÷†{ ñÁ{
 $òÁmsgÁøÁ¦Z,™Âü‰Å3üþÂ1. Sends data on the socket to a connected peer.Á´Ãúü¼ÃHE This is typically used on TCP sockets or datagram sockets which haveÁœ‰Ä been connected.Á¡Äúü©Ä:7 On success returns the number of bytes that were sent.Áø€Ç#ŸäèÄŽ
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=send&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=send&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/send.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/send.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/send.2>
* OpenBSD: <https://man.openbsd.org/send.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/send.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/send>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-send>
Á$Åíî íèv îþØ÷†{ •Å{
¡$–Åõ£œÅü‹ÇLüïÅ[X Identical to [`send`] but allows for specification of arbitrary flags to the underlyingÁ„ÏÆ
`send` call.ÁäÆúÔìÆ [`send`]: Socket::sendÁ|’Çïð ïèv ðþØ÷†{ ¢Ç{
¢$£Çõ£©Ç¦Z,µÇüµÉFü’ÈIF Send data to the connected peer. Returns the amount of bytes written.ÁúÀœœîÈú”ƒÉúßœ¬—ÉüíÈ@üéÈEüàÈPl¼Éñòó ñèv ò
æLæLçLðèéLˆ¦ —óë@M$Tó÷†{ ÊÉ{
£$ËÉôž$ÑÉüõÌ~ü¸ÊLI Identical to [`send_vectored`] but allows for specification of arbitraryÁü‰Ë52 flags to the underlying `sendmsg`/`WSASend` call.Áø˜Ç#ŸüÃË©
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=sendmsg&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=sendmsg&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/sendmsg.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendmsg.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/sendmsg.2>
* OpenBSD: <https://man.openbsd.org/sendmsg.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendmsg.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/sendmsg>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-sendmsg>
ÁçËúüïË,) [`send_vectored`]: Socket::send_vectoredÁúÀœœ®Ìú”ÃÌúßœ¬×Ìü­Ì@ü©ÌEü ÌPÄüÌôõö ôèv õ
æLæLçLðèéLˆ¦ —óë@M$Tö÷†{ žÍ{
¤$ŸÍôž$­Í¦Z,ËÍüÑÑ?ü¸Î@= Sends out-of-band (OOB) data on the socket to connected peerÁüýÎ0- by setting the `MSG_OOB` flag for this call.Á²ÏúüºÏ?< For more information, see [`send`], [`out_of_band_inline`].ÁþÏúÔ†ÐíÞü¥Ð6³‰ú”·Ñ¤¶Ñü­Ñ„ØÑ÷ø ÷èv øþØ÷†{ éÑ{
¥$êÑõ£ðÑü­ÔGüÎÒJG Sends data on the socket to the given address. On success, returns theÁäÓ number of bytes written.Á¾ÓúüÆÓ?< This is typically used on UDP or datagram-oriented sockets.Áø°Ç#ŸôŠÔ 
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=sendto&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=sendto&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/sendto.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendto.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/sendto.2>
* OpenBSD: <https://man.openbsd.org/sendto.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendto.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/sendto>
* Windows: <https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-sendto>
Á<´Ôùúû ùèv úþØ ûÛr÷†{ ¼Ô{
¦$½Ôõ£ÃÔź$ÏÔü×Öü°ÕLI Identical to [`send_to`] but allows for specification of arbitrary flagsÁüÖ$! to the underlying `sendto` call.ÁªÖúü²Ö  [`send_to`]: Socket::send_toÁ”ÞÖüýþ üèv ýþØ þÛr÷†{ úÖ{
§$ûÖõ£‰×ź$צZ,¶×üùÙZü¢ØHE Send data to a peer listening on `addr`. Returns the amount of bytesÁdïØ written.ÁøÈÇ#Ÿü€ÙòãúÀœœ²Ùú”ÇÙúßœ¬ÛÙü±Ù@ü­ÙEü¤ÙP„€Úÿ ÿèv 
æLæLçLðèéLˆ¦ —óë@M$T Ûr÷†{ ‘Ú{
¨$’Úôž$˜Úź$®Úü½Ýšü™ÛEB Identical to [`send_to_vectored`] but allows for specification ofÁüãÛA> arbitrary flags to the underlying `sendmsg`/`WSASendTo` call.Á©Üúü±Ü2/ [`send_to_vectored`]: Socket::send_to_vectoredÁúÀœœöÜú”‹Ýúßœ¬ŸÝüõÜ@üñÜEüèÜPÜÄ݃ ƒèv 
æLæLçLðèéLˆ¦ —óë@M$T Ûr÷†{ éÝ{
©$êÝôž$øÝź$–Þ¦Z,¯ÞüÜàWü¥ß96 Send a message on a socket using a message structure.ÁøàÇ#ŸüãßòãúÀœœ•àú”ªàúßœ¬¾àü”à@üàEü‡àP<ãàˆŠ èv ˆÄWÎŒ„XÖ
ŒNGENŠ÷†{ ëà{
ª$ìàœÔòà¦Z,Œáüàâ*|éâUœ{œ{
«´}Lü·è9„ºèUèvì‚
¬¨4Ëè\·ÿü™ý.+ Socket options get/set using `SOL_SOCKET`.ÁÈýúüÌýEB Additional documentation can be found in documentation of the OS.Áü’þB? * Linux: <https://man7.org/linux/man-pages/man7/socket.7.html>ÁüÕþa^ * Windows: <https://docs.microsoft.com/en-us/windows/win32/winsock/sol-socket-socket-options>Áèv®°±²´µ·¹º¼½¿ÀÂÃÄÅÇÈÊËÌü•+üÉÿ?< Get the value of the `SO_BROADCAST` option for this socket.Áúü•€B? For more information about this option, see [`set_broadcast`].ÁÜ€úüä€,) [`set_broadcast`]: Socket::set_broadcastÁLœŒ Œèvþé­ ¦­
®\¼‚®àÀ¯øÀ¯•Á¯¯®¯ü–„>üí‚?< Set the value of the `SO_BROADCAST` option for this socket.Á±ƒúü¹ƒGD When enabled, this socket is allowed to send packets to a broadcastÁd…„ address.Ál èvÖ›­ «„­
°$¬„“"L²„ü ˆ9üª†:7 Get the value of the `SO_ERROR` option on this socket.Áé†úüñ†JG This will retrieve the stored error in the underlying socket, clearingÁüÀ‡LI the field in the process. This can be useful for checking errors betweenÁT‘ˆ calls.ÁT§ˆŽ ŽèvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÿ¾ÿ¾­ ²ˆ­
±$³ˆü£Œ+üØŠ>; Get the value of the `SO_KEEPALIVE` option on this socket.Á›‹úü£‹B? For more information about this option, see [`set_keepalive`].Áê‹úüò‹,) [`set_keepalive`]: Socket::set_keepaliveÁLªŒ èvþé­ ´Œ­
²$µŒ²àÀ³øÀ³•Á³³²³•Žü>üú;8 Set value for the `SO_KEEPALIVE` option on this socket.ÁºŽúüÂŽIF Enable sending of keep-alive messages on connection-oriented sockets.Ál— èvÖ›­ ¥­
´Ð"L¬üã’4ü¤‘;8 Get the value of the `SO_LINGER` option on this socket.Áä‘úüì‘?< For more information about this option, see [`set_linger`].Á°’úü¸’&# [`set_linger`]: Socket::set_lingerÁ4ê’ èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ñÿ¾­ ñ’­
µ$ò’üÛ™Dü¸”85 Set value for the `SO_LINGER` option on this socket.Áõ”úüý”HE If `linger` is not `None`, a close(2) or shutdown(2) will not returnÁüÊ•KH until all queued messages for the socket have been successfully sent orÁüš–DA the linger timeout has been reached. Otherwise, the call returnsÁüã–JG immediately and the closing is done in the background. When the socketÁü²—FC is closed as part of exit(2), it always lingers in the background.Áý—ú\…˜¥í•˜úü˜HE On most OSs the duration only has a precision of seconds and will beÁ¼ê˜ silently truncated.Á†™úüŽ™HE On Apple platforms (e.g. macOS, iOS, etc) this uses `SO_LINGE
oob_inlineÁT£ü†§*ü‡¥:7 Get value for the `SO_PASSCRED` option on this socket.ÁÆ¥úüÎ¥A> For more information about this option, see [`set_passcred`].Á”¦úüœ¦*' [`set_passcred`]: Socket::set_passcredÁúò œÕ¦ú«
¤ê¦üÔ¦+ü˦6D§ èvþé­ –§­
º$—§T«¨ºàÀ»øÀ»•Á»»º»•ŽüȪ<üÚ¨:7 Set value for the `SO_PASSCRED` option on this socket.Á™©úü¡©MJ If this option is enabled, enables the receiving of the `SCM_CREDENTIALS`Á¬ó© control messages.Áúò œ—ªú«
¤¬ªü–ª+üª6dϪ èvÖ›­ ܪ­
¼$ݪØ#Dãªü›¯)üج:7 Get value for the `SO_PRIORITY` option on this socket.Á—­úüŸ­A> For more information about this option, see [`set_priority`].Áå­úüí­*' [`set_priority`]: Socket::set_priorityÁ»£|¯®úò œÌ®úŒ ¬á®úÊ ¬ø®üË®Cü¥®oüœ®zD¢¯ èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ÿ¾­ «¯­
½$¬¯4¿°½àÀ¾øÀ¾•Á¾¾½¾˜Žü¬³;üè°:7 Set value for the `SO_PRIORITY` option on this socket.Á§±úü¯±\Y Packets with a higher priority may be processed earlier depending on the selected deviceÁIJ queueing discipline.Á»£|À²úò œÝ²úŒ ¬ò²úÊ ¬‰³üܲCü¶²oü­²zd³³˜ ˜èvÖ›­ À³­
¿$Á³$Ddzü•·3ü»µ85 Get value for the `SO_RCVBUF` option on this socket.Áøµúü€¶IF For more information about this option, see [`set_recv_buffer_size`].ÁζúüÖ¶:7 [`set_recv_buffer_size`]: Socket::set_recv_buffer_sizeÁ„œ· èv÷†­ ­·­
À$®·4Á¸ÀàÀÁøÀÁ•ÁÁÁÀÁ˜Žü—ºAüì¸85 Set value for the `SO_RCVBUF` option on this socket.Á©¹úü±¹HE Changes the size of the operating system's receive buffer associatedÁ¤þ¹ with the socket.Á¤žºš šèvÖ›­ ³º­
Â$´º$ººüÖ½:ü¦¼:7 Get value for the `SO_RCVTIMEO` option on this socket.Áå¼úüí¼HE If the returned timeout is `None`, then `read` and `recv` calls willÁ¼º½ block indefinitely.Ádݽ èv÷›­ ê½­
Ã$ë½üŽÀLüé¾:7 Set value for the `SO_RCVTIMEO` option on this socket.Á¨¿úü°¿C@ If `timeout` is `None`, then `read` and `recv` calls will blockÁŒø¿ indefinitely.Á„•Àœ œèvÑÖ›­ ¦À­
Ä$§Àÿ¡D­Àü˜Ã/üÁÁ>; Get the value of the `SO_REUSEADDR` option on this socket.Á„ÂúüŒÂFC For more information about this option, see [`set_reuse_address`].Á×ÂúüßÂ41 [`set_reuse_address`]: Socket::set_reuse_addressÁlŸÃ èvþé­ ­Ã­
Å$®Ã<ÃÄÅàÀÆøÀÆ•ÁÆÆÅÆ•ŽüŠÇ>üìÄ;8 Set value for the `SO_REUSEADDR` option on this socket.Á¬Åúü´ÅHE This indicates that further calls to `bind` may allow reuse of localÁüÆKH addresses. For IPv4 sockets this means that a socket may bind even whenÁüÑÆ41 there's a socket already listening on this port.ÁŒ‘Çž žèvÖ›­ £Ç­
Ç$¤ÇA,ªÇü÷Ê3üšÉ;8 Get the value of the `SO_SNDBUF` option on this socket.ÁÚÉúüâÉIF For more information about this option, see [`set_send_buffer_size`].Á°Êúü¸Ê:7 [`set_send_buffer_size`]: Socket::set_send_buffer_sizeÁ„þÊŸ Ÿèv÷†­ Ë­
È$Ë4£ÌÈàÀÉøÀÉ•ÁÉÉÈÉà¼üöÍAüÎÌ85 Set value for the `SO_SNDBUF` option on this socket.Á‹Íúü“ÍJG Changes the size of the operating system's send buffer associated withÁ|âÍ the socket.Á¤ýÍ   èvÖ›­ ’έ
Ê$“Î$™Îü¶Ñ;ü…Ð:7 Get value for the `SO_SNDTIMEO` option on this socket.ÁÄÐúüÌÐIF If the returned timeout is `None`, then `write` and `send` cal
¤¥‡ú
¬Ã‡úÀœœâ‡úÓ
¬ÿ‡ú¥Œžˆú£¤¹ˆúµ”׈ú«
¤óˆú”‘‰úßœ¬­‰üĆüÀ†ü·†œ×‰­®¯ ­èv ®Óº ¯ûuÖ›Ï ô‰Ï
Ø$õ‰ÊÅLƒŠàÅL¡Šü鑎üäŒM©óúü¾HE For more information about this option, see [`join_multicast_v4_n`].Á‹Žúü“Ž85 [`join_multicast_v4_n`]: Socket::join_multicast_v4_nÁ
úÜŒçŽúú œ‚úÞ ¬Ÿú
¤¾ú
¬ÜúÀœœûúÓ
¬˜ú¥Œ·ú£¤Òúµ”ðú«
¤Œ‘ú”ª‘úßœ¬Æ‘üÝŽüÙŽüÐŽ¤ð‘°±² °èv ±Óº ²ûuÖ›Ï Ž’Ï
Ù$ÊÅLàÅL»’ü‚œüÿ”XU Join a multicast SSM channel using `IP_ADD_SOURCE_MEMBERSHIP` option on this socket.ÁÜ•úüä•LI This function specifies a new multicast channel for this socket to join.Áüµ–]Z The group must be a valid SSM group address, the source must be the address of the senderÁü——_\ and `interface` is the address of the local interface with which the system should join theÁüû—J„ñüʘ5Ùñ ú  ¼›™úú œ¼™ú”Ù™ú
¤õ™ú
¬“šúÀœœ²šúÊ ¬Ïšú¥Œîšú£¤‰›úµ”§›ú”Ûúßœ¬ß›ü‘™éüîü„™ù\‰œ³´µ ³èv ´Óº µÓº ÓºÖ›Ï žœÏ
Ú$ŸœsourceÁ4­œgroupÁ,ÈœàÅLâœü¥Žü¶ TQ Leave a multicast group using `IP_DROP_SOURCE_MEMBERSHIP` option on this socket.Á¡úü—¡@= For more information about this option, see [`join_ssm_v4`].ÁÜ¡úüä¡(% [`join_ssm_v4`]: Socket::join_ssm_v4Á ú  ¼¨¢úú œÉ¢ú”æ¢ú
¤‚£ú
¬ £úÀœœ¿£úÊ ¬Ü£ú¥Œû£ú£¤–¤úµ”´¤ú”Фúßœ¬ì¤üž¢éüš¢îü‘¢ùd–¥·¸¹º ·èv ¸Óº ¹Óº ºÓºÖ›Ï ¬¥Ï
Û$­¥Ÿ…4»¥®…,Ö¥àÅLð¥üà«2üÅ©C@ Get the value of the `IP_MULTICAST_ALL` option for this socket.Áªúü•ªIF For more information about this option, see [`set_multicast_all_v4`].Áãªúüëª:7 [`set_multicast_all_v4`]: Socket::set_multicast_all_v4Á»£|´«úò œÅ«ü³«&üª«1„ç«» »èvþéÏ ø«Ï
Ü$ù«,“­ÜàÀÝøÀÝ•ÁÝÝÜÝ•Žü›²?ü¸­C@ Set the value of the `IP_MULTICAST_ALL` option for this socket.Á€®úüˆ®<9 This option can be used to modify the delivery policy ofÁüÉ®2/ multicast messages. The argument is a booleanÁü€¯@= (defaults to true). If set to true, the socket will receiveÁüů63 messages from all the groups that have been joinedÁü€°=: globally on the whole system. Otherwise, it will deliverÁü°;8 messages only from the groups that have been explicitlyÁü‚±>; joined (for example via the `IP_ADD_MEMBERSHIP` option) onÁÜű this particular socket.Á»£|ï±úò œ€²üî±&üå±1¤¢²¼ ¼èvÖ›Ï ·²Ï
Þ$¸²£¾²ü´¶5ü¯´B? Get the value of the `IP_MULTICAST_IF` option for this socket.Áö´úüþ´HE For more information about this option, see [`set_multicast_if_v4`].Á˵úüÓµ85 [`set_multicast_if_v4`]: Socket::set_multicast_if_v4Áú”𶤙¶ü|»¶½ ½èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Óºÿ¾Ï ˶Ï
ß$̶ü¯¹Iüö·B? Set the value of the `IP_MULTICAST_IF` option for this socket.Á½¸úüŸA> Specifies the interface to use for routing multicast packets.Áú”•¹¤”¹ü‹¹œ¶¹¾¿ ¾èv ¿ÓºÖ›Ï ʹÏ
à$˹àÅLѹüå½3üü»DA Get the value of the `IP_MULTICAST_LOOP` option for this socket.ÁżúüͼJG For more information about this option, see [`set_multicast_loop_v4`].Áœ½úü¤½<9 [`set_multicast_loop_v4`]: Socket::set_multicast_loop_v4ÁŒì½À ÀèvþéÏ þ½Ï
á$ÿ½L™¿áàÀâøÀâ•Áââá╎ü¦ÁDüÆ¿DA Set the value of the `IP_MULTICAST_LOOP` option for this socket.ÁÀúü—ÀJG If enabled, multicast packets will be looped back to the local socket.ÁüæÀ;8 Note that this may not have any affect on IPv6 sockets.Á¬­ÁÁ ÁèvÖ›Ï ÃÁÏ
ã$ÄÁloop_v4Á<ÊÁü¨Å1üÃÃC@ Get the value of the `IP_MULTICAST_TTL` option for this socket.Á‹Äúü“ÄIF For more information about this option, see [`set_multicast_ttl_v4`].ÁáÄúüéÄ:7 [`set_multicast_ttl_v4`]: Socket::set_multicast_ttl_v4Á„¯Å ÂèvÔ´Ï ÀÅÏ
ä$ÁÅ,ÙÆäàÀåøÀå•Áååä墶üõÉ>ü€ÇC@ Set the value of the `IP_MULTICAST_TTL` option for this socket.ÁÈÇúüÐÇFC Indicates the time-to-live value of outgoing multicast packets forÁü›ÈJG this socket. The default value is 1 which means that multicast packetsÁüêÈ>; don't leave the local network unless explicitly requested.Á­ÉúüµÉ;잤üÉà ÃèvÖ›Ï ‘ÊÏ
æ$’ÊttlÁ˜ÊüÄÍ'ü‡Ì96 Get the value of the `IP_TTL` option for this socket.ÁÅÌúüÍÌ?< For more informatio
¤µàú
¬ÓàúÀœœòàúÓ
¬áúú œ®áú¥ŒËáú£¤æáúµ”„âú«
¤ âú”¾âúßœ¬Úâü•ßàü‘ßåüˆßð|„ãÈ ÈèvÖ›Ï ”ãÏ
í$•ãrecv_tosÁD›ãüÔê-üå=: Get the value of the `IP_RECVTOS` option for this socket.ÁÑåúüÙåDA For more information about this option, see [`set_recv_tos_v4`].Á¢æúüªæ0- [`set_recv_tos_v4`]: Socket::set_recv_tos_v4ÁúÜŒöæú  ¼‘çúÊ ¬²çú”ÑçúÞ ¬íçú
¤Œèú
¬ªèúÀœœÉèúÓ
¬æèúú œ…éú¥Œ¢éú£¤½éúµ”Ûéú«
¤÷éú”•êúßœ¬±êüìæàüèæåüßæð\ÛêÉ ÉèvþéÏ çêÏ
î$èêTûëîàÀïøÀï•ÁïïîüÁî5ü©ìB? Get the value for the `SO_ORIGINAL_DST` option on this socket.Á»£|ƒíúŒ ¬­íúÊ ¬Ðíúò œóíú⬔îüŸíüùìÁüðìÌ|ÈîÊ ÊèvºÄÏ ØîÏ
ð$Ùî\îñü®ïPM Socket options for IPv6 sockets, get/set using `IPPROTO_IPV6` or `SOL_IPV6`.ÁÿïúüƒðE¯‡üÉð@= * Linux: <https://man7.org/linux/man-pages/man7/ipv6.7.html>ÁüŠñc` * Windows: <https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-ipv6-socket-options>Áèvòôõ÷øùúüýÿƒˆŒŽüÂö4ü€ò<×ÁòúüÉòKH For more information about this option, see [`set_header_included_v6`].Á™óúü¡ó>; [`set_header_included_v6`]: Socket::set_header_included_v6Á»£|÷óúÀœœ¥ôú£¤Æôú
¬èôú¶ ¬‹õú  ¼®õú
¤Óõú”õõúßœ¬•öü—ôü“ô¢üíóÎüäóÙ”ÉöË Ëèvþéñ Üöñ
ò$ÝöTò÷òàÀóøÀó•Áóóòó•Žü¸ÿFü¡ø<¹ÛâøúüêøIÜü¸ùKáÜüˆúJG When this flag is enabled, the values set by `IP_OPTIONS` are ignored.Á×úúÜßúÂÞüÿú>èÞ»£|íüúÀœœ›ýú£¤¼ýú
¬Þýú¶ ¬þú  ¼¤þú
¤Éþú”ëþúßœ¬‹ÿüýü‰ý¢üãüÎüÚüÙ´¿ÿÌ ÌèvÖ›ñ Öÿñ
ô$×ÿ½áDÝÿüŒ…3üÓ‚B? Get the value of the `IPV6_TRANSPARENT` option on this socket.Ášƒúü¢ƒJG For more information about this option, see [`set_ip_transparent_v6`].Áñƒúüùƒ<9 [`set_ip_transparent_v6`]: Socket::set_ip_transparent_v6Á»£|Ä„úò œÙ„úŒ ¬î„üØ„,üÄBüº„MŒ“…Í Íèvþéñ ¥…ñ
õ$¦…l†õàÀöøÀö•Áööõö•Žü¤ŽHü÷†B? Set the value of the `IPV6_TRANSPARENT` option on this socket.Á¾‡úüƇ<¬æü‡ˆ:óæüƈ<¸çü‡‰=ÿçüɉ<ÇèüŠŠ=ŽéüÌŠ7Öéüˆ‹=: hosting the application that employs the IPV6_TRANSPARENTÁüÊ‹9ÞêüˆŒ:¢ëÇŒúüÏŒ;ôëü>ºì»£úò œñúŒ ¬†Žüð,üÛBüÒM¬«ŽÎ ÎèvÖ›ñ ÁŽñ
÷$ÂŽž\ÈŽüô“WüËMJ Join a multicast group using `IPV6_ADD_MEMBERSHIP` option on this socket.Áúü¥‘30 Some OSs use `IPV6_JOIN_GROUP` for this option.ÁÝ‘úüå‘Jˆïü´’IÝïü‚“JG index of the interface to join/leave (or 0 to indicate any interface).Áú¥ŒÛ“œÚ“ôÑ“Œû“ÏÐ Ïèv к½Ö›ñ ñ
ø$Ž”ÊÅL””àÅLª”ü¿šXüó—OL Leave a multicast group using `IPV6_DROP_MEMBERSHIP` option on this socket.ÁǘúüϘ41 Some OSs use `IPV6_LEAVE_GROUP` for this option.Áˆ™úüFC For more information about this option, see [`join_multicast_v6`].ÁÛ™úüã™41 [`join_multicast_v6`]: Socket::join_multicast_v6Áú¥Œ¦šœ¥šôœš”ÆšÑÒ Ñèv Òº½Ö›ñ Ùšñ
ù$ÚšÊÅLàšàÅLöšüΠ2üÀžEB Get the value of the `IPV6_MULTICAST_HOPS` option for this socketÁŠŸúü’ŸJG For more information about this option, see [`set_multicast_hops_v6`].ÁáŸúüéŸ<9 [`set_multicast_hops_v6`]: Socket::set_multicast_hops_v6Áú”´ ¤³ üª ŒÕ Ó ÓèvÔ´ñ ç ñ
ú$è 4…¢úàÀûøÀû•Áûûúû¢¶üƒ¥@ü®¢EB Set the value of the `IPV6_MULTICAST_HOPS` option for this socketÁø¢úü€£HE Indicates the number of "routers" multicast packets will transit forÁüÍ£Jý¤üœ¤>Ò¥ú”餤è¤üߤ¬Š¥Ô ÔèvÖ›ñ  ¥ñ
ü$¡¥hopsÁ$§¥üº©2ü§EB Get the value of the `IPV6_MULTICAST_ALL` option for this socket.Áç§úüï§IF For more information about this option, see [`set_multicast_all_v6`].Á½¨úüŨ:7 [`set_multicast_all_v6`]: Socket::set_multicast_all_v6Á»£|Ž©úò œŸ©ü©&ü„©1„Á©Õ Õèvþéñ Ò©ñ
ý$Ó©,ñªýàÀþøÀþ•Áþþýþ•Žüý¯?ü–«EB Set the value of the `IPV6_MULTICAST_ALL` option for this socket.Áà«úüè«<ïŽü©¬2üà¬@óü¥­6¾üà­=ÿü¢®;Ç‘üâ®@= joined (for example via the `IPV6_ADD_MEMBERSHIP` option) onÁܧ¯Õ’»£|ѯúò œâ¯üЯ&üǯ1¤„°Ö ÖèvÖ›ñ ™°ñ
ÿ$š°£ °üœ´0ü•²DA Get the value of the `IPV6_MULTICAST_IF` option for this socket.ÁÞ²úüæ²HE For more information about this option, see [`set_multicast_if_v6`].Á³³úü»³85 [`set_multicast_if_v6`]: Socket::set_multicast_if_v6Áú”‚´¤´üø³|£´
¤ÎÓú
¬ìÓúÀœœ‹ÔúÓ
¬¨Ôúú œÇÔú”äÔú£¤€Õúµ”žÕú”ºÕúßœ¬ÖÕüåÒŒüáÒüØÒœt€Öß ßèvþéñ Öñ
Œ$Ölª×ŒàÀøÀ•ÁŒ•ŽüˆÝEüÞ×B? Set the value of the `IPV6_RECVTCLASS` option for this socket.Á¥Øúü­ØKH If enabled, the `IPV6_TCLASS` ancillary message is passed with incomingÁüýØJG packets. It contains a byte which specifies the traffic class field ofÁ´ÌÙ the packet header.Á
ú  ¼þÙúÊ ¬ŸÚúÞ ¬¾Úú
¤ÝÚú
¬ûÚúÀœœšÛúÓ
¬·Ûúú œÖÛú”óÛú£¤Üúµ”­Üú”ÉÜúßœ¬åÜüôÙŒüðÙüçÙœÝà àèvÖ›ñ ¢Ýñ
Ž$£Ý recv_tclassÁ\©ÝüÌå2üªßDA Get the value of the `IPV6_RECVHOPLIMIT` option for this socket.ÁóßúüûßIF For more information about this option, see [`set_recv_hoplimit_v6`].ÁÉàúüÑà:7 [`set_recv_hoplimit_v6`]: Socket::set_recv_hoplimit_v6Á»£|£áâ<Ñáú  ¼æáúÊ ¬‹âúÞ ¬®âú
¤Ñâú
¬óâúÀœœ–ãúÓ
¬·ãúú œÚãú”ûãú£¤›äúµ”½äú«
¤Ýäú”ÿäúßœ¬ŸåüÃáûü¿áü™á¬üá·„Óåá áèvþéñ äåñ
$åå|çàÀøÀ•Á•ŽüèíIü¸çDA Set the value of the `IPV6_RECVHOPLIMIT` option for this socket.Áèúü‰èEB The received hop limit is returned as ancillary data by recvmsg()ÁüÓèDA only if the application has enabled the IPV6_RECVHOPLIMIT socketÁ\œé option:Á»£|¿éâ<íéú  ¼‚êúÊ ¬§êúÞ ¬Êêú
¤íêú
¬ëúÀœœ²ëúÓ
¬Óëúú œöëú”—ìú£¤·ìúµ”Ùìú«
¤ùìú”›íúßœ¬»íüßéûüÛéüµé¬ü¬é·¤ïíâ âèvÖ›ñ „îñ
$…î
recv_hoplimitÁl‹îüÝñ5ü’ðGD Get the value for the `IP6T_SO_ORIGINAL_DST` option on this socket.Á»£|ñðúŒ ¬Žñúò œ¥ñú⬺ñüñCüçðoüÞðz|äñã ãèvºÄñ ôññ
$õñ\øôüÊò@= Socket options for TCP sockets, get/set using `IPPROTO_TCP`.Á‹óúüóE¯‡üÕó?< * Linux: <https://man7.org/linux/man-pages/man7/tcp.7.html>Áü•ôb_ * Windows: <https://docs.microsoft.com/en-us/windows/win32/winsock/ipproto-tcp-socket-options>Áèv”šœü¦ø8üŠõ>; Get the value of the `TCP_KEEPIDLE` option on this socket.ÁÍõúüÕõ^[ This returns the value of `TCP_KEEPALIVE` on macOS and iOS and `TCP_KEEPIDLE` on all otherÁü¸ö%" supported Unix operating systems.Á»£|õöâ<£÷úú œ¸÷ú
¬Ù÷úµ”ü÷ü•÷ƒü‘÷ˆüëö´üâö¿”­øä äèvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
 ›ÿ¾ Àø
$Áøü´ÿ<ü›ù?< Get the value of the `TCP_KEEPINTVL` option on this socket.ÁßùúüçùFC For more information about this option, see [`set_tcp_keepalive`].Á²úúüºú41 [`set_tcp_keepalive`]: Socket::set_tcp_keepaliveÁ»£|†ûúŒ ¬°ûú  ¼Óûú¶ ¬øûúÊ ¬›üúÞ ¬¾üúå Œáüúô ´€ýúò œ¤ýúˆ œÅýú
¤æýú ”ˆþú© ¬¨þú«
¤Ëþú”ñþÿœˆÿüðþ,ü¢ûüüú±üóú¼´»ÿå åèvž Òÿ
$Óÿ4î€àÀøÀ•Á˜Ž ›üæ‡6ü¬=: Get the value of the `TCP_KEEPCNT` option on this socket.ÁîúüöFñžÁ‚úüÉ‚4ÏŸ»£|•ƒúŒ ¬¿ƒú  ¼âƒú¶ ¬‡„úÊ ¬ª„úÞ ¬Í„úå Œð„úô ´úò œ³…úˆ œÔ…ú
¤õ…ú ”—†ú© ¬·†ú«
¤Ú†úâ¬ü†ú”£‡îŒ»‡œº‡ü¢‡,ü±ƒ¨ü‹ƒÔü‚ƒß¬í‡æ æèvÔ´ ƒˆ
$„ˆL˜‰àÀ˜øÀ˜•Á˜˜˜¢¶üò•HüljDA Set parameters configuring TCP keepalive probes for this socket.ÁŠúü˜ŠDA The supported parameters depend on the operating system, and areÁüáŠKH configured using the [`TcpKeepalive`] struct. At a minimum, all systemsÁü±‹IF support configuring the [keepalive time]: the time after which the OSÁüÿ‹@= will start sending keepalive messages on an idle connection.ÁÄŒúüÌŒ-* [keepalive time]: TcpKeepalive::with_timeÁþŒú\†¥íúüžJG * This will enable `SO_KEEPALIVE` on this socket, if it is not alreadyÁ enabled.Áü€ŽHE * On some platforms, such as Windows, any keepalive parameters *not*ÁüÍŽLI configured by the `TcpKeepalive` struct passed to this function may beÁüžLI overwritten with their default values. Therefore, this function shouldÁüïJG either only be called once per socket, or the same parameters shouldÁü¾(% be passed every time it is called.Áëúçô†‘ú<Ž‘£úäš‘ use std::time::Duration;Á»‘úüÑ63 use socket2::{Socket, TcpKeepalive, Domain, Type};Áþ‘úü†’(¡õü³’@™«üø’'$ let keepalive = TcpKeepalive::new()Áü¤“+( .with_time(Duration::from_secs(4));ÁüÔ“KH // Depending on the target operating system, we may also be able toÁü¤”FC // configure the keepalive probe interval and/or the number ofÁüï”  // retries here as well.Á”•úüœ•*' socket.set_tcp_keepalive(&keepalive)?;ÁtË•Œú<Þ•£úê•úŒù•çè çèv è¶„Ö› ‹–
$Œ–paramsÁ4’–üñ˜-ü¡—=: Get the value of the `TCP_NODELAY` option on this socket.Áã—úüë—DA For more information about this option, see [`set_tcp_nodelay`].Á´˜úü¼˜0- [`set_tcp_nodelay`]: Socket::set_tcp_nodelayÁ\ø˜é éèvþé „™
š$…™L™ššàÀøÀ•Áš•ŽüÝ>üÆš=: Set the value of the `TCP_NODELAY` option on this socket.Áˆ›úüEB If set, this option disables the Nagle algorithm. This means thatÁüÚ›IF segments are always sent as soon as possible, even if there is only aÁü¨œIF small amount of data. When not set, data is buffered until there is aÁüöœKH sufficient amount to send out, thereby avoiding the frequent sending ofÁ”Æ small packets.Á|äê êèvÖ› ô
œnodelayÁ<û¤ç¢èvžŸá â žŸü‚£7$…£ëì ëèv ìþØ÷† Š£
ž$£õ£•£ü¦MúÀœœÉ¥ú”Þ¥úßœ¬ò¥üÈ¥@üÄ¥Eü»¥Pl“¦íîï íèv î
ö ö ÷ Ôßù ˆ¦ èóÇãp9Üï÷† ¡¦
Ÿ$¦¦ôž$¬¦DšªŸàÀ øÀ •Á  Ÿ ÇŸ䯪š2¢¢™w£¤á â £¤´ªüÒª7$Õªðñ ð™w ñþØ÷†¡ Úª¡
£š2$ߪõ£åªü„­MúÀœœ½¬ú”Ò¬úßœ¬æ¬ü¼¬@ü¸¬Eü¯¬Pl‡­òóô ò™w ó
ö ö ÷ Ôßù ˆ¦ èóÇãp9Üô÷†¡ •­¡
¤š2$š­ôž$ ­D¯¤àÀ¥øÀ¥•Á¥¥¤¥•¬¢¯èv§¨© !¡!¤!¨©§ü¾¯4,Á¯õö õèv öþØ÷†¦ ǯ¦
§$̯õ£Ò¯üì°GúÀœœ¥°ú”º°úßœ¬Î°ü¤°@ü °Eü—°Ptï°÷øù ÷èv ø
æLæLçLðèéLˆ¦ —óë@M$Tù÷†¦ þ°¦
¨$ƒ±ôž$‰±üâ±%,å±ú úèvÖ›¦ 뱦
©$ð±좲š2««™w¬­® !¡!¤!¬­®§²üƲ4,ɲûü û™w üþØ÷†ª ϲª
¬š2$Ô²õ£Ú²üô³GúÀœœ­³ú”³úßœ¬Ö³ü¬³@ü¨³EüŸ³Pt÷³ýþÿ ý™w þ
æLæLçLðèéLˆ¦ —óë@M$Tÿ÷†ª †´ª
­š2$‹´ôž$‘´üê´%,í´ € ™wÖ›ª ó´ª
®š2$ø´Ôªµèv°Àc°ü˵8ε  ƒ   èv   c cˆ¢cµ
 `£cõ£ `àB¤GS
ƒ œ¥¯ Òµ¯
°$Óµ± Ùµ\ƒ5<‡5»× ¤,±²Šé\±³Šé±³ ManuallyDropÁd:ÃÛ±´r,Vé!±µAsFdÁ$²,±·AsRawFdÁ<¸«+±¸áà­+±¹Áy±ºËDÖÄÆ´0•|L†\¤tv\^JLl¤=´Öü´PM A reference to a [`Socket`] that can be used to configure socket types otherÁü…" than the `Socket` type itself.Á¨úü¬NK This allows for example a [`TcpStream`], found in the standard library, toÁüûOL be configured using all the additional methods found in the [`Socket`] API.ÁËúüÏJG `SockRef` can be created from any socket type that implements [`AsFd`]ÁüšGD (Unix) or [`AsSocket`] (Windows) using the [`From`] implementation.Áâúüæ&ºìüÖHE [`AsFd`]: https://doc.rust-lang.org/stable/std/os/fd/trait.AsFd.htmlÁüŸXU [`AsSocket`]: https://doc.rust-lang.org/stable/std/os/windows/io/trait.AsSocket.htmlÁøúçôúüIF Below is an example of converting a [`TcpStream`] into a [`SockRef`].ÁÙú£úüå*' use std::net::{TcpStream, SocketAddr};Á úÌ”  use socket2::SockRef;Á® úü² ;8 # fn main() -> Result<(), Box<dyn std::error::Error>> {Áüî 41 // Create `TcpStream` from the standard library.Áü£
85 let address: SocketAddr = "127.0.0.1:1234".parse()?;矆
?< # let b1 = std::sync::Arc::new(std::sync::Barrier::new(2));ÁÔœ  # let b2 = b1.clone();Áü· /, # let handle = std::thread::spawn(move || {Áüç FC # let listener = std::net::TcpListener::bind(address).unwrap();Áœ®  # b2.wait();Áü 63 # let (stream, _) = listener.accept().unwrap();Áüù B? # std::thread::sleep(std::time::Duration::from_millis(10));Á´¼
 # drop(stream);Á
 # });Á„Ý

# b1.wait();Áüî
.+ let stream = TcpStream::connect(address)?;Áúü¡.+ // Create a `SockRef`erence to the stream.ÁüÐ,) let socket_ref = SockRef::from(&stream);Áüý30 // Use `Socket::set_tcp_nodelay` on the stream.Áü±&# socket_ref.set_tcp_nodelay(true)?;Á¬Ø drop(socket_ref);Áîúüò(% assert_eq!(stream.nodelay()?, true);Áì› # handle.join().unwrap();Áñ±Ý¡£úç3¼¼Ày;N3”øNF>½¾é䫱»»ÃÛÃÛåÏÅÛ»¬µÜÀ,%*èvüê"±»»ŠéFu\»Ÿ ç3èvô‘ç3ÀÀÀyÁÂê!ë!¿¿èvüÑ  „ Ày Àyê!¿ Ú¿
Âç3ü£:ü’MJ On Windows, a corresponding `From<&impl AsSocket>` implementation exists.Áúú”ôœ‹üó,üé7üàBç3ĤÅÄÅÍìz ¬,zÀyÆëƨ')ôüä41 The caller must ensure `S` is actually a socket.Á$ ŠzÀyÃÃ
Æç3z¨ü·8žzÈÀcÈüÝ8àˆ  † žz  c cˆ¢cµ
 `£cõ£ `àB¤GS
ˆ œ¥Ç äÇ
È8± ë<§6«6ÌÏÐÑàíîðñòóôõˆŠŒœŸ ¡¢¤¦©«¬®°²³µ¸¹º»¼¾¿ÀÁÃÅÈËÌÍÎÏÐÓ®×minÁï ÅÉÊOsStrÁ,¢ˆÉËðè<‡æLÉÌŠéÉÍŠéÉÍíëÉÏš ÀÉÐÏéÑÛÉÑÆà¶MÉÒß¹D¾ºÉÔƼD‹̺ÉÕ
NonZeroU32ÁTäÉÖ NonZeroUsizeÁdº
²–É×™Ð
,ÉÙ²Ð
«+ÉÚ
BorrowedFdÁTé
ÎNÉÛáà
­+ÉÜýàL€ ¯+Éݺ}<‹ ö+ÉÞRawFdÁ,” ª+ÉßOsStrExtÁDÔ Ï$Éà± ’'Éâé~d¨ ã'Éã£~T¶ ­(Éä …0Éåµ 
Éæ¬šD–
­ÖÉèInstantÁ< 
óTÉéì´
¦Éëž
ë1Éìssize_tÁ<ø É퀼õ É<–èÉðï(ÉñÉ´^4éìÉó´^íÉóÂ_DñÉôÂ_ÉôýZDû³ÉõÈÛ`d…œÉöó$“øÉ÷óùÉ÷ÄW4÷Éù±YLÿœÉúŽ`LŠÉûŽ`ÉûÎ꿬ü”‘<‚ ý©’ ÿÈ’  SOCK_DCCPÁL œ@SOCK_RAWÁDÜ íSOCK_SEQPACKETÁtí @ƒ
SOCK_DGRAMÁT“ ÄH SOCK_STREAMÁ\Ÿ ÃH IPPROTO_DCCPÁd £
IPPROTO_MPTCPÁlÊ ˆ IPPROTO_SCTPÁd¼ °IPPROTO_UDPLITEÁ|Œ ²Š IPPROTO_ICMPÁdÓ ËŒIPPROTO_ICMPV6Átá Ì IPPROTO_TCPÁ\ˆ Í IPPROTO_UDPÁ\• ÎÝÅ æÌ‘˜î‘¥ŠŒ„üÍÜ MSG_TRUNCÁL ޘ SO_OOBINLINEÁdœ ÄOIpv6MreqÁD€ ˆ š IPV6_HDRINCLÁdÑ  ÚIPV6_RECVHOPLIMITÁŒÏ$ ÝœIPV6_RECVTCLASSÁ|Ü' é
IP_HDRINCLÁT¯) ñž
IP_RECVTOSÁTý, ûŸIP_TOSÁ4Í. ï Î Lý/ ÇO¡ SO_PASSCREDÁ\“2 ÊO¢ SO_PRIORITYÁ\¤3 ÆO£IpMreqÁ4×3ð¥û"4ß3» ¦
IPPROTO_IPÁTç3 ϧ IPPROTO_IPV6Ádó3 ШIPV6_MULTICAST_LOOPÁœ4 ΩIPV6_UNICAST_HOPSÁŒ–4 ˪ IPV6_V6ONLYÁ\­4 Õ«IP_ADD_MEMBERSHIPÁŒº4 ¬IP_DROP_MEMBERSHIPÁ”Í4 Œ­IP_MULTICAST_LOOPÁŒá4 Š®IP_MULTICAST_TTLÁ„ô4 ¯IP_TTLÁ4Š5 ð°MSG_PEEKÁD5 Û±
SOL_SOCKETÁTœ5 »O² SO_BROADCASTÁd¨5 ÀO³SO_ERRORÁD¶5 ¾O´ SO_KEEPALIVEÁdÀ5 ÃOµ SO_RCVBUFÁLÎ5 ÂO SO_RCVTIMEOÁ\Ù5 €Q· SO_REUSEADDRÁdê5 ¼O¸ SO_SNDBUFÁLø5 ÁO¹ SO_SNDTIMEOÁ\ƒ6 QºSO_TYPEÁ<6 ½O» TCP_NODELAYÁ\™6 ñ¼ IpMreqSourceÁdœ9ƒ¾IP_ADD_SOURCE_MEMBERSHIPÁĪ9 ¿IP_DROP_SOURCE_MEMBERSHIPÁÌÄ9 ÀÁ œö< Ï­¤‹= ÐÃIPV6_MULTICAST_HOPSÁœÇA ÍÅIPV6_MULTICAST_IFÁŒÜA ÌÆIP_MULTICAST_IFÁ|ïA ˆÇMSG_OOBÁ<€B ÚÈ TCP_KEEPCNTÁ\•F öÊ
TCP_KEEPINTVLÁl¢F õËãtÆK ôÉÍmsghdrÁ4Œ¯­Cï½ ª „þ Ä”Œ h ·Z ] J M ”Þ= . 1   ¤Ú ´°