Files
boc/aamos-ledger-rust/target/release/deps/libsocket2-e6aea063b8085825.rlib
T

1455 lines
901 KiB
Plaintext
Raw Normal View History

!<arch>
/ 0 0 0 0 58956 `
Î                                                                                                                                                                                   (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, (, ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\ þ\_ZN109_$LT$socket2..sockaddr..SockAddr$u20$as$u20$core..convert..From$LT$core..net..socket_addr..SocketAddr$GT$$GT$4from17ha415b39f1e09d859E_ZN111_$LT$socket2..sockaddr..SockAddr$u20$as$u20$core..convert..From$LT$core..net..socket_addr..SocketAddrV4$GT$$GT$4from17h797b5f6c0da6a692E_ZN7socket23sys10to_in_addr17he468ba22a255471dE_ZN111_$LT$socket2..sockaddr..SockAddr$u20$as$u20$core..convert..From$LT$core..net..socket_addr..SocketAddrV6$GT$$GT$4from17h03451534020e07a0E_ZN7socket23sys11to_in6_addr17h9c06838b836bce92E_ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h931209d1d579c908E_ZN64_$LT$socket2..sockaddr..SockAddr$u20$as$u20$core..fmt..Debug$GT$3fmt17he6e05145b863cd7fE_ZN4core3str7pattern14TwoWaySearcher4next17h6232bd5647213f11E_ZN4core3str7pattern14TwoWaySearcher4next17h680a58b767002667E_ZN55_$LT$$RF$str$u20$as$u20$core..str..pattern..Pattern$GT$13into_searcher17h8e8a765cdcfeea40E_ZN61_$LT$socket2..sys..SockFilter$u20$as$u20$core..fmt..Debug$GT$3fmt17h48b6b813965c9a55E_ZN68_$LT$socket2..sockaddr..SockAddr$u20$as$u20$core..cmp..PartialEq$GT$2eq17he556748b4d646badE_ZN7socket28sockaddr8SockAddr8as_bytes17hfbab21b7e5a993caE_ZN71_$LT$socket2..sockaddr..SockAddrStorage$u20$as$u20$core..
socket2-e6aea063b8085825.socket2.efcb83edc8e66247-cgu.0.rcgu.o/
socket2-e6aea063b8085825.socket2.efcb83edc8e66247-cgu.1.rcgu.o/
socket2-e6aea063b8085825.socket2.efcb83edc8e66247-cgu.2.rcgu.o/
socket2-e6aea063b8085825.socket2.efcb83edc8e66247-cgu.3.rcgu.o/
lib.rmeta/ 0 0 0 644 402312 `
ELF·"@@GNUÀ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Á­‡Úa”ļ|daðXŒ-c78ebf83e1484b99Á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((ï)ê(±•î,lس³ýZ´µ¥e‘9G½ÙéÛ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¸¹ºÇ[»ˆ¼½á[¾ˆê‡@I~,–nŠ û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±ÂÏTKÒç3éÀy ç3¤¿c»»Ø3½¨±¾ù3±ÂÏTKÒ8¿cììí´^îˆ ž?(ù/¶¿cøøùóúˆ Á«f¼5ÿcÂ_ˆ
äWpF4¿cŽ`ˆ ßï•Öp¥fxÌìààÜ;âÁÉãù3ÉšÊwZ‡ò#Oš2 Å|¿c®®ÎQ¯àQÉ`ïýØÄÖO¿c×׌]Ù©]ÉÛ¿]ÉNð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ññòÜ;ôˆ Û„††L[¨Pš2é!âƒö!⃿cœœÛ`ï`žû`Ÿ‹a±.ÕYuÆØ¶„¿cÄWÎŒ„X,€ßžšp‰YßWìWÌìÄWÎŒ„X,€ßžšp888¿cœœ±Y Î¡„Xwktõb=ó‰YßWìWÌ윜±Y Î¡„Xwktõb=ó888/(M³¿¸¯»ÑìÓøÕÞ²®Ü×õñ œ¬œ³Ã¸ñìýø¢œG³I³K³Å‡#ÍŠ#Ïð#û¼ö+À­ã'êìÖÞøàëíO³öìøŽšQ³óìÿøR³Á¸ïìûøÂ¸ðìüøˆ
¦
¿»´×ûñä౜æà¸ìøÿñ¿cÀØeé1µß˜"še"Š Û#à #Ÿ! é! Ìì ,«+¯+­+Ðìö!


Óªr·
+ü uªrüŒSŒ¢  
Àªrô¢ Æ ,üõ
Q ªr,„ e6Ü
À¥!ŒÅÜü³#$€ìÿ òŽüù#¢ø«, 
àW5 
&-üó¯ òŽ ªr¸ãmÝ¥ ªrŒ€9bìŽ@Ü Ž«Èsockaddr_storageÁ ss_familyÁ __ss_pad2Áà 
__ss_alignÁÃ –àã(Ù®®J
ÙÇ‘¡p¦(å ³ê·-Ûr8 ÛrBÇ‘ Ç‘~ ˆq{Â’J
Ù±|%Ç‘„±%±%üï$] ³ Ë%Ò%2ü—$»ÛrDÜ$ªr<¯$É$Ç‘$(S\Á6


ÌÏ6¼Ï6
+d€7
6$7

d7D©7
 
ä–7  n
™"ù Œ<Eü·7  7±—¥ö—ö—ÛrÝ“ªr ü–7¯³7
Ú[ö—ßßErrorÁà ¬
ÑøÿËO Ÿ‡˜7±—ö—ÿ—’˜ ¿ü³7’Ë8ü«2  Ê8
33ü½6Žüò6ÙÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
‡˜½˜ÌÔ2±—$È2ªr<ö6Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ö—½˜A±—Ÿ·—Sùʼ— ô˜9Ý“BainitÁÍ^Õ16“–`«—ß³˜P±—¼ìð3
Üð3
ÀÇ‘+üð3* ™4üÐ3K6Lä3n+ù¤ST 
™8
<¬8ªrµ8ݓܞ8lž8
2G;$ü˜8" Ä8 ¹8  Ã87; ‡˜¼7ô˜Rö—¸7ö—Ûr»ªróéÝ“ƒvresÁ<ú6Ý“<Å6ªrÅdà76
¶cùž"#
ÜWù@#–ŸFö—ö—ò _ref__lenÁ$‡;l‡;4Œ;
â¡…0…0PathÁ†0Îß-bªŸðcÂ^_DŒ;üí:(Ìí:
îx! š;›;ü8Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ûr½˜¤¨:š¢$œ:  ¢7 š¢Sõ
$¦”¢bõ¢ š¢éš¢ï´†>Ç‘¢>;üÒ=P\ð=·“,æ= -ü‡?´‡?Ç‘& ¥?ü€?' ì ¦?­?<üÑ>\äz4ï>·“,å>;D•@£@=üæ?=L@·“,÷? -ü–A(lAÇ‘ü–AB ªr ×A ÝAÞA>ü×@‡·¨´õ@·“,ë@ ǑʓˆAdòBÇ‘üËB> ( ˆCC?üBªr|±BÛr$¨BÇ‘h4´œDÇ‘´¶D<¶DüœD0 ËDÒD@üîCd$D·“,ƒDy:´èEÇ‘¼‚FD‚FüèE1 ˜FŸFAüºEe$ÙE·“,ÏEy:|™{Dž{
F$™{Tž{Ü™{$©{
e
I,®{\©{»{SüÛz`Ž{·“,ùz ÷­,€{u ó­¨*º*YÅ­Òí­°•æšæ lšæ

Dæ
Ø4Tæ ¦æç ç‘ç«üàâ±ü‘æœ{$†ãœ{ùâœ{®œ{¬´´ÌUîû$‹ýá[¾º¾ºIpv4AddrÁ¿ºoctetsÁ¯Q5N`hzØÊ Šk w
 ¿c½Â
‡dÓ Ø
³åáÌüÇ[1=©²9?òMSpaáóûÀ{ˆ Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ ÈÇ— éBL
 ûu  c cˆ¢cµ
 `£cbufÁ `àB¤GS
_gÝ“y©² Ý“¥ ¾±p£©² ޶ŽÂ±Ð__self_0Áý×µÉü¬¶©²àò‚¶©²2ò"ûûã€üÄ&+1ûu=µENXœéÕtéÕ ! ûÕ@!$‡Ö Û¼­Ö­ÖDurationÁ®ÖsecsÁâ}¯ÖnanosÁâ}Zµ–²ªüæÕr˜ü¦Ö+´ºÖ|ºÖ ! ÏÖB
Iœ¦Ö
€~Ug ÐÖü¡Ö1 Û¼ö¸ ÑÖ­ ×ÖÚÖÍü¢Õ¸Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙö¸„ÏÕ» » û"¼ l_onoffÁ½ l_lingerÁ
ò 4·Õ32ö¸ywvû"5ßD¨×t¢×$ü½ØH »  àØ ùØ9DÀ× Ûö¸¼‰Ø ”‰ØD‰Ø 
%<’Ø
Œ~2L’Ø šØbp ŸØüÍ×^ »  ð× ªØ ŽÙÎüÜÖ²ü»×p÷»\×§»DñÖt»×ö¸8!)" ö¸%durationÁLÕ¿}
Ž,z*ÔÏ
¬+ÎNÎN
BorrowedFdÁÐNÊ}ä+ÑN_phantomÁä+§]òÞ^  ¼ÆœÆ
®+èvÚ$€êó Žˆ&ü«5Œ«
¼èvü½"'ü »æ PhantomDataÁFu\»Ÿ èvÆüøüÆÏ »»Ø3½¨±¾ù3±ÂÏTKÒ zÊ ÑÁ9ÑÁBžKÃÛÃÛ ManuallyDropÁÅÛ»¬µÜÀ,%*èvdèvP¨Ê}ø“ÁÇËÁîÂúŽ×ÆÃ²¬Ñ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#º%#‘³|—³ ´—³ ¬³$»³̳ „ó
 
! 
 Ú³
ü³  $Þ³è á³ Äñ³ ÿ³   $„´
 
1
8lñ³
ÿ} E
6 [ ˆ´
  ôì³ Û¼ö¸ ‰´ ´ v’´¹üï±£ü³ƒü·³Y§»„¡²ã
ã
timevalÁä
tv_secÁå
tv_usecÁ@ßÀ‚ððD…²æåœ
ãâáö¸Õ¿msecÁcnsecÁ8 üóÛ!l†Ü$†Ü 
&4‹Ü
ØQ3D‹Ü ’Ü^
e”óÛ
­Òr “ÜüÙÛB è šÜÜËüðÙ­èèin_addrÁés_addrÁ…Y:ËôÖv”<£Ú޶$Ú+޶+addrÁ8líÝ$íÝ 
&4òÝ
­R3DòÝ ùÝüÑÝ0 õ  €ÞƒÞÍüŽÝuõ õ in6_addrÁö s6_addrÁZËYµ[c*”DÂÝ ̺̺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ÁGÐ0˜ŠBUytµâ޶LâáµLüáüäâ8Ý“êžÝÓ޶ÓžÝ޶޶ž¾±¬ˆäBJC޶¬žÝ޶žÝØ޶Ø޶÷ multiaddrÁ» interfaceÁƪ訪è£ÖQ¾±¸ÀÖQ¾±tƒÏÏ޶ ¾±±ÖQ¾±libc::IFNAMSIZÁ„¶äL»ä
¬+±—$¶ä\»ä\Èäü§ä5L¬ä
$§äd:4Õäü¬ä0âäüîâôÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
½˜Œéã²Ä,Šã ±—$™ã4«ãÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙô ô õ ¨÷ ˆÐ  mjçítoé4Âã¤}µÌ´ž
·¿]CS’ëòÕë·TCP_CA_NAME_MAXÁTCP_CA_NAME_MAXÁ4Ôð ÕðŸLõðØ®|õðüõð"lÂñ4Çñ
}$Âñ
DÇñL©ò
 ó­´©òT³ò
…t
B d³òì©ò$Àò
ÂË4Ì4Í4
__variant1ÁÎ4Ï4
__variant2Áë òg   4Àò\Ôò¨ß£M£M
é 
.tÝñüùñ"ß& Úg QÇM ßÎMÿÿÿÿ$øßãMèßãM
øßßM$ Ö¿½˜øßÄMn¡N Ö¿½˜ .ø¬¡ñË 
ž$Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
½˜øßæLÒ }
Ÿü¡ñËlL‰ó4”óüùò# ןüöò' Ö¿Ë}½˜£ó
­ëò[Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ˆê)?ÈXM´­½˜¨
¡$Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Ë}½˜‚÷î
¨ üãïÀüÀðãüäð¿øßð?FMÖþ÷ä™ð²Ä,ðŸlÄðTèðôØ® àù)•¢˜¢™¢lš¢ˆ›¢œ¢[¢ˆe0<#˜‚÷&ÜôÀß”M[ Âñé  óðO àù[¼—€œ¢6½˜ o‚÷xË}Õàùúô6©]4¿]6蟺 Ž Õ¹cÞýøß&
Úsu¼ðYŒñ¹ñêÑò[ÛóÙÖôcø÷jü…ƒ%$™ƒ Ÿƒ £ƒ  §ƒ  Z ¹ ©ƒ  üä‚Q ® ´ƒ»ƒ±ü˜‚£
–}TÏ‚$©‚´‚¼‚ Ä‚¹¹ sock_filterÁºcodeÁ»jtÁ¼jfÁ½v Æv˜Ú ^\PD8Þþªëþ®öþ²µ÷õ†

ଇ
àù*©²ć

) 
5 ©² 
ûc±£¨rwÒàú†ßë ´÷ Ë}˜µ
©²
‹ú䩲삶ôÝ“üX±fq‹ú©²g‚¶©²6«‚tƒ‰àù\•‰¤•‰¸®’‰ £ ’‰Ì‘‰
Ü¢àù££¹ƒ£¹„£þ-'ºˆÉ¬gÃc°‰·ü߈QØ®,òˆ€ƒ,舋ú
¦…Ýõ,Q›…Õ®?è³?ò$)äz5 äz?HRé·?ôéµ? §‡&0×?$êÂ?÷¹?§‡§‡ls5¹
BL¤Î@ ì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üIìJþ$)œ{5 œ{?HRí…JíƒJ „Ž&0£J$îJƒ‡J„Ž„Žls5¹
BL´²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í®Vð³VŠ$)Ô{5 Ô{?HRñ·VŒñµV Ý”&0ÙV$òÂV¹Vݔݔls5¹
BLÜã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²¿eôÄe$)Œ|5 Œ|?HRõÈe˜õÆe ë&0ëe$öÓeÊeëëls5¹
BL¼Øi4Øi táiÞ îiäØi óiúiðü¦iT$ÉiŒ|$Ài9Þ Ìr  °÷ös §»)©²Ð÷™v   §») ©² ÷Àx
 

Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙm 
y  ©²
ýc/5$*öû
Æ Ë^÷Ñr¡w´ ¶„˜µ¢©² §»©x©²‰¥ŠY©²b  €£qÄ¥z±(‰¥©²‰¥©²ïÂ¥©²¿ô£Q°øös§»
Ù§»/7Ðø™v§»Ϧ)1 øÀx€£
Ù€£/7Ór œøØr£2¶„>Ù¤F§»ù‰¥§»ω¥×€£ªÄ¥²ŠϦ?Ϧ ¿§Ý
$§z Û¼ö¸$š} Û¼ö¸$Œ€  Û¼ü†z• œ š€ ¡€ƒüÙyȶ„dïy§»º§»¤€£Ž1T”…$™…  Û¼ö¸ üû„A œ§»€£ »…Â…ü¼„¶„$ì„¶„$Ó„ö¸$Ù„§»µö¸´'ï`)ZtôŒDùŒ  Û¼ö¸ ü׌I œ§»€£ Ÿ¦üŒ¶„$ÈŒ¶„$«Œö¸D±Œ§»µö¸´'û`)Zl”<Ç”  Û¼ Δü¦”G œ§»§» ì”ó”üæ“¶„$—”¶„$€”<†”€£³±%a(X,Æü ¸º&ûu18?<ƒý ¸½&ûu1¾±9@ŒÅ? ìí%äz07>|“J øù%œ{07>œÅV %Ô{07>¤Öe %Œ|07>ü‹k ñò(ññòÜ;ôˆ Û„††L[¨PcààÜ;âÁÉãù3ÉšÊwZ‡ò#O£ªÉñòœìíœøùÀײ¤,IoSliceÁ<•æLÃ\€Ãíçë 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®ÎH K N D­E „Œ2 Äó%  ¬ðî
¤‹×
Ë
Î

¹
œÆ¬
¼ª  ä È  , Œ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]½¼ª¡$›…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`.Áªrê(±•î,l)ÌÅ((Ç‘¤ãª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µ
 `£c¹´ `àB¤GS
¨´/ Ü/
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–ŸJJü«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 }?;Á¤Ý1­ü<ö1Âíd2×ü<“2Âí<Ÿ2ŒÆD¹2±—š14¥5541Íì±— Â2Íìö— Å2–"±—·—üƒ3=±—·—˜"øšl³3
3±—ö—¨›áLUWQSìÐ3dÖ3,·73<closure_kind>Á7<closure_signature>Á7<upvars>Á773ô˜ü: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$”:š¢Ñ£1¡991Í욢 ™:àš¢ ¢\Ò:
8š¢õ
°Q')üÌ<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
?‰Tüî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Å­$õ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ºËV*,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£ì{ §~{
$¨~¹´®~üÍ‚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 Ô
ññòÜ;ôˆ Û„††L[¨PÕÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†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 ×
ññòÜ;ôˆ Û„††L[¨PØ„æ{ ¶–{
˜$·–ÿå$Å–¦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 à
ññòÜ;ôˆ Û„††L[¨PáÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†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 ã
ññòÜ;ôˆ Û„††L[¨P佂{ ú­{
$û­ÿå$‰®¦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 Î¡„Xwktõb=óêëì£ì{ ñÁ{
 $òÁ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,€ßžšpŠ£ì{ ëà{
ª$ìà§›òà¦Z,Œáüàâ*|éâUœ{œ{
«´¾Wü·è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»× ¤,±²Ã\±³Ã±³æÄ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ÂÏTKÒ½¾é䫱»»ÚÅüê"±»»Ã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¨(bü·8žzÈÀcÈüÝ8àˆ  † žz  c cˆ¢cµ
 `£c¹´ `àB¤GS
ˆ ´Ç äÇ
È8± ë<§6«6ÌÏÐÑàíîðñòóôõˆŠŒœŸ ¡¢¤¦©«¬®°²³µ¸¹º»¼¾¿ÀÁÃÅÈËÌÍÎÏÐÓ®×minÁï ÅÉÊOsStrÁ,¢ˆÉËã´<‡æLÉÌÃÉÍÃÉÍíëÉÏš ÀÉиµÑÛÉÑ£¨¶MÉÒʰD¾ºÉÔ”ßD‹̺ÉÕ
NonZeroU32ÁTäÉÖ NonZeroUsizeÁdº
²–É×™—
,ÉÙ²—
«+ÉÚÛÀ
Î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ï´ ¡ „þ Ä”ƒ _ ·Q T A D ”Þ4 % (   ¤Úþ ´°
ã
Ó Ö à Æ ³  £ ¦     p s äÀ ] ”… O R @ C 1 4 % 
  ñ
ô
®
å
è
Ö
Ù
Ä
$…µ
¸
¥
¨
´Åš

Œ
e
h
A
D
.
1

"
ÿ 
ð ó á ä |¦À lü± $𢠥  • |‰~ tÖh ¤çL $Œ4 7   ”… œÄ蔶ά†±šz}$dgJM?B14"%öù㔖ɳ”Ë š¼É${¬Ö'^„©)F„÷,.dÇ.|÷/ Œ2óŒž3Ú$À3<Ì3ʹ¼¡¤dgDG*-

éìÉ̪­˜~ehJM36æéËγœƒil$þ8tŠ9V-0$ï<úýëî$ÀAÍЭ°y|$ŽFcfGJ¤ÙF$éF”°KP¤ŸL<¬L ´L »N ºL àL, »L8 ¼L& ¾L8¼,ÀL ÆL ÞL, ÈL ÉL ÔL, ÊL8argÁËL& ÎL8$ÐL$ ÕL
ÖL, ØL ÙL ÛL$ ÚL
ÜL*âL åL ¸N æL ·N+ ðL ñL †M8«,òL ÷L …M8
unused_unsafeÁløL8M8蟔M ˜M8"4šM ¡M ¹M8$£M'§M, ©M8 ªM ¬M ·M, ­M ®M µM, ¯M8úѰM$ ³M
¶M% ºM8ÄM8èŸÇMËM ÎM7 ÏM ÑM ŒN8ßM âM N8ÀãM'æM8ÒÜèM'êM8Ç—,ìM'ñM8
last_os_errorÁlóM €N N8$ŽN “N ±N8«¡N £N §N8蟤N% ¹NĶPúå ŒœOúô ´³Oúˆ œÏOú ”èOú© ¬€Pú«
¤›Pü–Oœü’O¡ü‰O¬\¼PÉä˜W»£|ÔVú¶ ¬éVúò œ€WüèV,üÓVBüÊVM|žWÉ\ŽYúò œØWîgnuÁ”†XªXû64ÁÜÁXü©X4üøWoüÎWŸúŒ ¬óXüÅWÆü¼WÑ4“YÉ\Ž_”û^ Unix only API.ÁäzÓÔÄì`ü _HE Domain for low-level packet interface, corresponding to `AF_PACKET`.Á»£|€`úŒ ¬`úÊ ¬´`úò œË`üœ`Cüö_oüí_z4ö`ÒÒäz¼Âbü¥aFC Domain for low-level VSOCK interface, corresponding to `AF_VSOCK`.Á»£|úaúŒ ¬búò œ¦büŽb,üùaBüðaM,ÌbÒÒäzLÚe”ÇeŽÙœ{ÖרüÒi&üêe&# Set `SOCK_NONBLOCK` on the `Type`.Á»£|¨f
úŒ ¬Òfú  ¼õfú¶ ¬šgúÊ ¬½gúÞ ¬àgúò œƒhú
¤¤hú
¬Æhú«
¤éhúiiœ¦iüŽi,üÄfüžf­ü•f¸\ßiœ{œ{ÕÕ
ÖÃdü¿n"ü±j%" Set `SOCK_CLOEXEC` on the `Type`.Á»£|îj úŒ ¬˜kú  ¼»kú¶ ¬àkúÊ ¬ƒlú”¦lúÞ ¬Ælúò œélú
¤Šmú
¬¬múËãœÏmúÓ
¬ðmú«
¤“nüŠk¨üäjÔüÛjß<Ìnœ{œ{ÕÕ
×leü‹r* úŒ ¬šoú  ¼¹oú¶ ¬ÚoúÊ ¬ùoú”˜púÞ ¬´púò œÓpú
¤ðpú
¬ŽqúË㜭qúÓ
¬Êqú«
¤éqüü‡oÿDŸrœ{œ{ÕÕίftƒ”¬‚ Unix-only API.ÁúËãœÍ‚ú”â‚úêã¬ö‚üÌ‚@üÈ‚Eü¿‚PŒ|ÚÛÜÝüæ†+ü¥ƒ-* Check if the message terminates a record.Á׃úü߃HE Not all socket types support the notion of records. For socket typesÁü¬„IF that do support it (such as [`SEQPACKET`]), a record is terminated byÁüú„63 sending a message with the end-of-record flag set.Áµ…úü½…30 On Unix this corresponds to the `MSG_EOR` flag.Áõ…úüý…" [`SEQPACKET`]: Type::SEQPACKETÁú£¤²†úêã¬È†ü±†-ü­†2ü¤†=„ó†Œ|ÙÙ
Úïfü¹‰)üÇ30 Check if the message contains out-of-band data.Áû‡úüƒˆC@ This is useful for protocols where you receive out-of-band dataÁüˈ)& mixed in with the normal data stream.Áùˆúü30 On Unix this corresponds to the `MSG_OOB` flag.ÁtƉŒ|ÙÙ
ÛÁgüŒ%ü”Š%" Check if the confirm flag is set.Á¾ŠúüÆŠB? This is used by SocketCAN to indicate a frame was sent via theÁü?< socket it is received on. This flag can be interpreted as aÁüÑ‹  'transmission confirmation'.Áö‹úüþ‹74 On Unix this corresponds to the `MSG_CONFIRM` flag.Á»£|ÄŒúŒ ¬ÙŒúò œðŒüØŒ,üÃŒBüºŒMT™Œ|ÙÙ
Ü”hü¿'üç)& Check if the don't route flag is set.Á•ŽúüŽ=: This is used by SocketCAN to indicate a frame was createdÁ´ßŽ on the local host.ÁúŽúü‚96 On Unix this corresponds to the `MSG_DONTROUTE` flag.Á»£úŒ ¬ðúò œ‡ú«
¤œüïBüÉoüÀzŒ|ÙÙ
Ýgiüí‘"úË㜪‘ú”¿‘úêã¬Ó‘ü©‘@ü¥‘Eüœ‘PŒ|ßÀcßü–’B™’Š  ‰ Œ| Š  c cˆ¢cµ
 `£c¹´ `àB¤GS
´Þ Þ
ß$ž’± ¤’ü­˜„¸˜š2ááÅ|šÊwZ‡ò#Oâãɘ„Ó˜Ó˜Éàà  iovecÁž iov_baseÁŸ iov_lenÁ#ÿtú0ó›qüé˜1Lé˜ÉààÃFu\»Ÿ š2ŠÎüŸ™-š2ååÅ|«™üÑ™-š2ççÅ|Ý™샚š2ééÅ|êë숚ü§šIµš²öÅ|èè
êš2¹´¹šüÌœ3DÚœŒ  Œ Å| Œ ŠÎè ãœè
ëš2$äœüâ?   Å|  ŠÎè ýè
ìš2$‚žüùŸBú”㟤âŸüÙŸt‡ Ž  Ž õõ sockaddr_unÁö
sun_familyÁ÷sun_pathÁ‡ÔžË.|%~ Ÿ 
í<– üø¡@ú”Á¡¤À¡ü·¡l†¢    ¢Ñ£ š¢õ¢õ
$”¢d†¯8üæ¯@úË㜣¯ú”¸¯úêã¬Ì¯ü¢¯@üž¯Eü•¯P|ô¯    ­C­CÌÊ®Cmsg_nameÁ¯C msg_namelenÁ°Cmsg_iovÁ±C
msg_iovlenÁ²C msg_controlÁ³Cmsg_controllenÁ´C msg_flagsÁ]Ø·ñž"6 ‘ Ûr ‰°
𧛄°Ð $–°ü²QúË㜈±ú±úê㬱±ü‡±@üƒ±Eüú°Pt›² ’ …ý ¨õ ¯²
ñ§›ª²µ ¼²Ó²ü‹´VúËãœÈ³ú”ݳúêã¬ñ³üdz@üóEüº³P”™´ “ …ýŒû ±´
ò§›¬´µ ¾´Ö´üöµ>úË㜳µú”ȵúêã¬Üµü²µ@ü®µEü¥µP„„¶ ” …ý š¶
󧛕¶¦Z,§¶ü¦·5úËãœã¶ú”ø¶úê㬌·üâ¶@üÞ¶EüÕ¶Pd´· • …ýŒ| Æ·
ô§›Á·üϸ7úË㜌¸ú”¡¸úê㬵¸ü‹¸@ü‡¸Eüþ·P”ݸ – …ý õ¸
õ§›ð¸l»¹”¨¹ŽÙÛr÷øü«¼-üϹQN Constructs a `SockAddr` with the family `AF_VSOCK` and the provided CID/port.Á¥ºúd­º # ErrorsÁ¾ºúüƺUR This function can never fail. In a future version of this library it will be madeÁ| » infallible.Á»£|ã»úŒ ¬ø»úò œ¼ü÷»,üâ»BüÙ»M,²¼Ûröö
÷cidÁ¸¼«s$¼üþÁ4ü¼ÀJG Returns this address VSOCK CID/port if it is in the `AF_VSOCK` family,Áä‹Á otherwise return `None`.Á»£|¶ÁúŒ ¬ËÁúò œâÁüÊÁ,üµÁBü¬ÁM„… — ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙö –Âö
ø$—ÂlÐÅü…Å*' Unix only API (not available on WASI).Áú”ºÅ¤¹Åü°ÅÛrúüþÿüúÆ üäÅ[X Returns true if this address is an unnamed address from the `AF_UNIX` family (for localÁüÄÆ1. interprocess communication), false otherwise.ÁTǘ  ˜ Ûrù ŒÇù
ú$ÇLÌÇúã‰ûû‰û˜Šûûúû §ú·“üÈÍAtÖÍ ™ ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ™ §úù åÍù
ü$æÍ¨Îüã‰ýû‰ý˜ŠýýüýðŽ ûŽ üÏÑ8DÒÑÉš  š Ûr › §úù ÛÑù
þ$ÜÑ<âÑüüÓOTÿÓÉœ   œ Ûr  §ú œ ó­ù ŠÔù
ÿ$‹Ô<‘Ô
abstract_nameÁl®ÔüíÛ?üñÚLI Returns this address as Unix `SocketAddr` if it is an `AF_UNIX` pathnameÁüÂÛ&# address, otherwise returns `None`.Á<ôÛž  ž ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙþMþM×µÿM“Ýê%€Nê%è)6{}š~Éù üÛù
$ýÛü•ß*ü˜ÞDA Returns this address as a `Path` reference if it is an `AF_UNIX`ÁüáÞ/, pathname address, otherwise returns `None`.Á\œßŸ  Ÿ ÛrÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Ÿ  ¢ù ¨ßù
$©ßLéßã‰û‰˜ŠîŽ Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ¶¤ûŽ Îà㉃û‰ƒ˜Šƒƒƒ¶¤·“ðŽ ü—ä4üÿáYV Returns this address as a slice of bytes representing an abstract address if it is anÁüÝâ96 `AF_UNIX` abstract address, otherwise returns `None`.Á›ãúü£ã\Y Abstract addresses are a Linux extension, so this method returns `None` on all non-LinuxÁt„ä platforms.Á¬žä     ÛrÛ¼ݼÞ¼©ß¼à¼Ûá¼
\œŠüŽFDޏ¾²ã
¢Ê}¦Ž§¾µŽ¢ã‰£û‰£˜Š££¢£þ¦ ü¦a¥  ¥ ŠÎ£ì Í
¤Ê}¹¹´È¦Z,厒¤ã‰¥û‰¥˜Š¥¥¤¥ü¡’L¯’¦  ¦ ŠÎ¹ú Ö’
¦Ê}¾’¹´Ñ’¦Z,ò’|Š”¦ã‰§û‰§˜Š§§¦§·—£ìˬ ŠÎˬ ‘–¦ã‰¨û‰¨˜Š¨¨¦¨¨¶ üµ–@\ÖÑ£
©Ê}Ï– 虩©üÛšúË㜘šú”­šúêã¬Ášü—š@ü“šEüŠšPléš§ ¨  §
ññòÜ;ôˆ Û„††L[¨P¨ „æ •›
«Ê}üšÿå$¦Z,½›üÀ¢úËãœýœú”’úê㬦üüœ@üøœEüïœP”Ω ª  ©
ññòÜ;ôˆ Û„††L[¨Pª ½‚ ÿ
¬Ê}æÿå¦Z,§žt´ ¬ã‰­û‰­˜Š­­¬­û·  œœ±Y Î¡„Xwktõb=óˬ ˬ üÄ£wúË㜣ú”–£úê㬪£ü€£@üü¢Eüó¢P<Ò£« ¬ ­ ®  « œœ±Y Î¡„Xwktõb=ó¬ ­ ® £ì ÷£
®Ê}ߣ§›ò£¦Z,—¤ó¤®ã‰¯û‰¯˜Š¯¯®¯¨¶ ü†¥P$”¥¯  ¯ ó­£ì ­¥
°Ê}™¥¹´¨¥¦Z,´¥Ù¦°ã‰±û‰±˜Š±±°±¨¶ ü½§rúËãœú¦ú§úê㬣§üù¦@üõ¦Eüì¦Pl˧° ±  °
æLæLçLã´éLˆ¦ —óë@M$T± £ì ÷§
²Ê}Þ§ÿå$ñ§¦Z,‹¨ü‚©w<©² ³  ² ó­ ³ Ûr£ì µ©
³Ê}©¹´°©“Ý$À©¦Z,Õ©¼«³ã‰´û‰´˜Š´´³´¨¶ ü ¬ŠúËãœÝ«ú”ò«úê㬆¬üÜ«@üØ«EüÏ«P„®¬´ µ  ´
æLæLçLã´éLˆ¦ —óë@M$Tµ ¶ Ûr£ì ݬ
µÊ}Ĭÿå$׬“Ý$ñ¬¦Z,†­üÞ®aúË㜛®ú”°®úêã¬Ä®üš®@ü–®Eü®P<ì®· ¸ ¹ º  · ÄWÎŒ„X,€ßžšp¸ ¹ º £ì ˆ¯
Ê}ô®§›ƒ¯¦Z,¯ó¯ã‰·û‰·˜Š···¨¶ üϰ`\ݰ‚ã
¸Ê}é°optÁø°¹„±üï±Bdø±ÉàÙ§»
¹Õ¿¨lüÝ´|ë´§»²ã
ºÊ}€µõÊ “µ¹£µÕ¿D³µüŶ<dȶɧ»àÙ
»Õ¿DÕ¶ü²»G»£|кúú œíºú
¬‚»úµ”™»üìº@üèºEüʺeüÁºp”À»›å
¼Ê}Ó»4×¼¼ã‰½û‰½˜Š½½¼½°ëü¤½ZŒ²½»  » ¶„²ã Þ½
¾Ê}ĽÐ"LÓ½üôÉ)úú œ‘Éú
¬ªÉú¥ŒÅÉúµ”ÜÉü‹Éeü‡ÉjüþÈuL÷ÉÉö¸
¿Õ¿DÊüšË<úµ”„ˤƒËüúÊLËÉÜô
ÀÊ}§ËcmdÁ¶ËüÏÌZúµ”¹Ì¤¸Ìü¯ÌLÒÌɲã
ÁÊ}ÜÌget_cmdÁ<ëÌset_cmdÁ<ûÌ»Í$‹Í¾ÎÁã‰Âû‰Â˜ŠÂÂÁÂþ¦ üåÏ]úµ”ÏϤÎÏüÅÏdèÏɲã
ÃÊ}õÏ¢Ò <„Ð²Ò <”лÍ$¤ÐØÑÃã‰Äû‰Ä˜ŠÄÄÃÄþ¦ üêÒZTÿÒÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ò޽˜¥ÆÆ¯ï ŠÓ
ÅòŽÊ}ÓõÊ œÓ¹¨Ó*,¿ÕÅã‰Çû‰Ç˜ŠÇÇÅÇòŽ£ÕòŽÝ“ÑÛÑÛ¸µÓÛ¢ÍÝÔÛ»ÝÍõƒ«%9òŽü§×zT¼×ò޲ã¥Éɯï Ç×
ÈòŽÊ}Ï×õÊ â×¹ò×payloadÁ<‚Ø:<åÙÈã‰Êû‰Ê˜ŠÊÊÈÊòŽþ¦ üðÙ:T„Ú¼  ¼ ¾±žÝ •Ú†â“ÝanüŸÜ8d­ÜžÝ¾±
̨Ü<ºÜüŽÝ<\¢Ý½  ½ ˆàÄß ´Ý
Í“ÝÃoü…Þ7l“ÞÄ߈à
ΓÝ$¡ÞüÀáƒ
úÜŒöÞúú œßúÞ ¬¦ßú
¤Áßú
¬ÛßúËãœößúÓ
¬àú¥Œªàú£¤Áàúµ”Ûàú«
¤óàúáúê㬥áüðÞÌüìÞÑüãÞÜDÔá¾ ¿  ¾ ¾± ¿ ûuñæ íá
Ï”èdsªèosü­çD»£|ÍæúŒ ¬ææúÊ ¬ýæúò œ”çüåæCüÇæcü¾æn|»çÑ£
ÐÊ}ËçtÛèÐã‰Ñû‰Ñ˜ŠÑÑÐѼ¬ ɬ \ÃêÐã‰Òû‰Ò˜ŠÒÒÐÒÅ® üûìD»£|·ìúŒ ¬Ììúò œãìüËì,ü¶ìBü­ìM|‰íÑ£
ÓÊ}™ít©îÓã‰Ôû‰Ô˜ŠÔÔÓÔ¼¬ ɬ \˜ðÓã‰Õû‰Õ˜ŠÕÕÓÕÅ® ”Àð”­ðŽÙèvרÚÛÜÞßáâäæçéêìíïðòóõ÷øùúûýþƒœžŸ ¡¢£¤¥¦§¨«¬­üáöLüÙð8–ñúüžñDA This function directly corresponds to the `accept4(2)` function.ÁçñúüïñIF This function will block the calling thread until a new connection isÁü½òLI established. When established, the corresponding `Socket` and the remoteÁüŽó$! peer's address will be returned.ÁøÃÅ%hü·ó%Ë
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=accept4&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=accept4&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/accept4.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept4.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/accept4.2>
* OpenBSD: <https://man.openbsd.org/accept4.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/accept4.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/accept4>
Á»£|ôó úŒ ¬žôú  ¼Áôú¶ ¬æôúÊ ¬‰õúÞ ¬¬õúò œÏõú
¤ðõú
¬’öú«
¤µöüôÄüêóðüáóû<èöÀ  À èvûŽÖ ðöÖ
×$ñö¦Z,÷öü„úT úŒ ¬ë÷ú  ¼Šøú¶ ¬«øúÊ ¬ÊøúÞ ¬éøúò œˆùú
¤¥ùú
¬Ãùú«
¤âùüá÷œüØ÷§D’úÁ  Á èvûŽÖ ›úÖ
Ø$œú¦Z,¢útËûØã‰Ùû‰Ù˜ŠÙÙØÙ·—ÈʲÄˬ ü„@üÿü! Sets `CLOEXEC` on the socket.Á¥ýú\­ý‚µ½ýúüÅý96 On supported platforms you can use [`Type::cloexec`].Á»£|Ô€úµ”逤è€üÓ€*üÊ€5\‹   èv²ãÖ Ö
Ú$˜
close_on_execÁlžüŸ‚Húµ”…‚¤„‚üûd­‚à  à èv²ãÖ º‚Ö
Û$»‚ìô lÁ‚ü(üñ”=: Gets the value of the `TCP_MAXSEG` option on this socket.Á³•úü»•@= For more information about this option, see [`set_tcp_mss`].Á€–úüˆ–/, [`set_tcp_mss`]: crate::Socket::set_tcp_mssÁ»£|Æ–úËãœß–ú”ô–üÞ–)üÚ–.üÅ–Dü¼–O<——Ä  Ä èvßûÖ Ÿ—Ö
Ü$ —,µ˜Üã‰Ýû‰Ý˜ŠÝÝÜÝ­ýüíš5üܘ=: Sets the value of the `TCP_MAXSEG` option on this socket.Áž™úü¦™LI The `TCP_MAXSEG` option denotes the TCP Maximum Segment Size and is onlyÁì÷™ available on TCP sockets.Á»£|£šúË㜼šú”Ñšü»š)ü·š.ü¢šDü™šO\ôšÅ  Å èv²ãÖ €›Ö
Þ$mssÁ‡›ü„ -üóœKH Returns `true` if `listen(2)` was called on this socket by checking theÁüÃ*' `SO_ACCEPTCONN` option on this socket.Á»£|…žúÜŒ¯žúŒ ¬Îžú¶ ¬ñžúÊ ¬”Ÿúò œ·Ÿú«
¤ØŸü¡žÖüûüò\‹ Æ  Æ èvÚ±Ö — Ö
ß$˜ °¡ßã‰àû‰à˜Šààßà Õü°¤*üÑ¡LI Returns the [`Domain`] of this socket by checking the `SO_DOMAIN` optionÁœ¢¢ on this socket.Á»£|Í¢úŒ ¬÷¢úÊ ¬â£úò œ…¤ü颺üâæüº¢ñ4·¤Ç  Ç èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
äz½˜Ö ¾¤Ö
á$¿¤ü‹¨6üÍ¥IF Returns the [`Protocol`] of this socket by checking the `SO_PROTOCOL`ÁÔ›¦ option on this socket.Á»£|ͦúŒ ¬÷¦ú¶ ¬š§úÊ ¬½§úò œà§üé¦üæÁüº¦ÌD’¨È  È èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ʽ˜Ö ›¨Ö
â$œ¨­©âã‰ãû‰ã˜Šããâã£ÕÊü¥­%ü®ª;8 Gets the value for the `SO_MARK` option on this socket.ÁîªúüöªFC This value gets the socket mark field for each packet sent throughÁ„Á«º¦Ö«úüÞ«C@ On Linux this function requires the `CAP_NET_ADMIN` capability.Á»£|¹¬úŒ ¬Ö¬úÊ ¬í¬úò œ„­üÕ¬Cü¯¬oü¦¬z$¬­É  É èvßûÖ ±­Ö
ä$²­4îäã‰åû‰å˜Šååäå­ýü˲3üì®;8 Sets the value for the `SO_MARK` option on this socket.Á¬¯úü´¯FC This value sets the socket mark field for each packet sent throughÁüÿ¯EB this socket. Changing the mark can be used for mark-based routingÁüɰ.+ without netfilter or for packet filtering.Áü°úü„±C¿ˆ
»£|ß±úŒ ¬ü±úÊ ¬“²úò œª²üû±CüÕ±oü̱zDÒ²Ê  Ê èv²ãÖ Û²Ö
æ$ܲÃG$â²üŸ·*üÕ´:7 Get the value of the `TCP_CORK` option on this socket.Á”µúüœµA> For more information about this option, see [`set_tcp_cork`].Áâµúüêµ1. [`set_tcp_cork`]: crate::Socket::set_tcp_corkÁ»£|³¶úŒ ¬Ð¶úÊ ¬ç¶úò œþ¶ü϶Cü©¶oü ¶zD¦·Ë  Ë èvÚ±Ö ¯·Ö
ç$°·4øçã‰èû‰è˜Šèèçè Õüà¼8üê¸:7 Set the value of the `TCP_CORK` option on this socket.Á©¹úü±¹HE If set, don't send out partial frames. All queued partial frames areÁüþ¹PM sent when the option is cleared again. There is a 200 millisecond ceiling onÁüÓºRO the time for which output is corked by `TCP_CORK`. If this ceiling is reached,Áüª»2/ then queued data is automatically transmitted.Á»£|ô»úŒ ¬‘¼úÊ ¬¨¼úò œ¿¼ü¼Cüê»oüá»zdç¼Ì  Ì èv²ãÖ ô¼Ö
é$õ¼corkÁ$û¼ü“Â.üè¾>; Get the value of the `TCP_QUICKACK` option on this socket.Á«¿úü³¿EB For more information about this option, see [`set_tcp_quickack`].Áý¿úü…À96 [`set_tcp_quickack`]: crate::Socket::set_tcp_quickackÁ»£|ÖÀúŒ ¬€ÁúÊ ¬£Áúò œÆÁú«
¤çÁüòÀüÌÀÀüÃÀËdšÂÍ  Í èvÚ±Ö §ÂÖ
ê$¨ÂT¿Ãêã‰ëû‰ë˜Šëëêë Õü£É@üîÃ>; Set the value of the `TCP_QUICKACK` option on this socket.Á±Äúü¹Ä\Y If set, acks are sent immediately, rather than delayed if needed in accordance to normalÁüšÅa^ TCP operation. This flag is not permanent, it only enables a switch to or from quickack mode.Áü€Æc` Subsequent operation of the TCP protocol will once again enter/leave quickack mode depending onÁüèÆfc internal protocol processing and factors such as delayed ack timeouts occurring and data transfer.Á»£|æÇúŒ ¬ÈúÊ ¬³Èúò œÖÈú«
¤÷Èü‚ÈüÜÇÀüÓÇË„ªÉÎ  Î èv²ãÖ »ÉÖ
ì$¼ÉquickackÁDÂÉüÅÎ:ü»ËJG Get the value of the `TCP_THIN_LINEAR_TIMEOUTS` option on this socket.ÁŠÌúü’ÌQN For more information about this option, see [`set_tcp_thin_linear_timeouts`].ÁèÌúüðÌQN [`set_tcp_thin_linear_timeouts`]: crate::Socket::set_tcp_thin_linear_timeoutsÁ»£|ÙÍúŒ ¬öÍúÊ ¬Îúò œ¤ÎüõÍCüÏÍoüÆÍzÄÌÎÏ  Ï èvÚ±Ö åÎÖ
í$æÎTÄÐíã‰îû‰î˜Šîîíî Õü·ÕLüóÐJG Set the value of the `TCP_THIN_LINEAR_TIMEOUTS` option on this socket.ÁÂÑúüÊÑvs If set, the kernel will dynamically detect a thin-stream connection if there are less than four packets in flight.ÁüÅÒc` With less than four packets in flight the normal TCP fast retransmission will not be effective.Áü­Óƒ The kernel will modify the retransmission to avoid the very high latencies that thin stream suffer because of exponential backoff.Á»£|ËÔúŒ ¬èÔúÊ ¬ÿÔúò œ–ÕüçÔCüÁÔoü¸Ôzä¾ÕÐ  Ð èv²ãÖ ÛÕÖ
ï$ÜÕtimeoutsÁDâÕü¨Ú2üç×C@ Get the value of the `TCP_NOTSENT_LOWAT` option on this socket.Á¯Øúü·ØJG For more information about this option, see [`set_tcp_notsent_lowat`].Á†ÙúüŽÙC@ [`set_tcp_notsent_lowat`]: crate::Socket::set_tcp_notsent_lowatÁ»£|àÙúŒ ¬õÙúò œŒÚüôÙ,üßÙBüÖÙMŒ¯ÚÑ  Ñ èvßûÖ ÁÚÖ
ð$ÂÚ<ÞÛðã‰ñû‰ñ˜Šññðñ­ýüèÞAü‰ÜC@ Set the value of the `TCP_NOTSENT_LOWAT` option on this socket.ÁÑÜúüÙÜOL If set the kernel will limit the amount of _unsent_ data in the sendbuffer.Áü­Ýda This differs from `set_send_buffer_size` which limits the sum of unsent and unacknowledged data.Á»£| ÞúŒ ¬µÞúò œÌÞü´Þ,üŸÞBü–ÞM¬ïÞÒ  Ò èv²ãÖ …ßÖ
ò$†ßlowatÁ,Œßü•ã3üƒáC@ Gets the value for the `SO_BINDTODEVICE` option on this socket.ÁËáúüÓá>; This value gets the socket binded device's interface name.Á»£|©âúŒ ¬ÆâúÊ ¬Ýâúò œôâüÅâCüŸâoü–âz4œãÓ  Ó èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙªBªBö­B¹´÷<®B÷<9)
-ÜnLçEçEèEGlobalÁ ¿±‡§í#½˜Ö £ãÖ
ó$¤ãt¹äü™íEü•éC@ Sets the value for the `SO_BINDTODEVICE` option on this socket.ÁÝéúüåéIF If a socket is bound to an interface, only packets received from thatÁü³êIF particular interface are processed by the socket. Note that this onlyÁüë@= works for some socket types, particularly `AF_INET` sockets.ÁÆëúüÎëGD If `interface` is `None` or an empty string it removes the binding.Á»£|­ìúŒ ¬ÊìúÊ ¬áìúò œøìüÉìCü£ìoüšìz\ íÔ Õ  Ô èvÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ Õ ó­²ãÖ ¬íÖ
õ$­íªèL³íÛðõã‰öû‰ö˜Šööõöþ¦ ü¸ûVüëôQN Sets the value for `IP_BOUND_IF` or `SO_BINDTOIFINDEX` option on this socket.ÁÁõúüÉõI×·
ü—ö52 particular interface are processed by the socket.ÁÑöúüÙöHE If `interface` is `None`, the binding is removed. If the `interface`Áü¦÷-* index is not valid, an error is returned.ÁØ÷úüà÷LI One can use [`libc::if_nametoindex`] to convert an interface alias to anÁT±ø index.Á»£|Óø úå Œýøúô ´œùúˆ œÀùú ”áùú© ¬úúÞ ¬¤úúÓ
¬Çúúò œêúúŒ ¬‹ûüïø¼üÉøèüÀøó¼¿ûÖ  Ö èvÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙô ô õ ¨÷ ˆÐ  mjçítoé²ãÖ ×ûÖ
÷$ØûªèLÞûüœˆVüÍSP Sets the value for `IPV6_BOUND_IF` or `SO_BINDTOIFINDEX` option on this socket.Á¥‚úü­‚I×·
üû‚5„¾
µƒúü½ƒHѾ
üŠ„-¤¿
¼„úüÄ„Lé¿
T•…¿À
»£|·… úå Œá…úô ´€†úˆ œ¤†ú ”ņú© ¬å†úÞ ¬ˆ‡úÓ
¬«‡úò œÎ‡úŒ ¬ï‡üÓ…¼ü­…èü¤…ó¼£ˆ×  × èv’Ã
²ãÖ »ˆÖ
ø$¼ˆªèLˆüÄ“?üµŽIF Gets the value for `IP_BOUND_IF` or `SO_BINDTOIFINDEX` option on thisÁüƒJG socket, i.e. the index for the interface to which the socket is bound.ÁÒúüÚIF Returns `None` if the socket is not bound to any interface, otherwiseÁü¨ returns an interface index.Á»£ úå Œ‰‘úô ´¨‘úˆ œÌ‘ú ”í‘ú© ¬úÞ ¬°’úÓ
¬Ó’úò œö’úŒ ¬—“üû¼üÕèüÌó|Ë“Ø  Ø èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
’Ã
½˜Ö Û“Ö
ù$Ü“ü“ž?ü‚™KH Gets the value for `IPV6_BOUND_IF` or `SO_BINDTOIFINDEX` option on thisÁüÒ™J‚È
¡šúü©šIäÈ
ü÷š¸É
»£|®› úå ŒØ›úô ´÷›úˆ œ›œú ”¼œú© ¬ÜœúÞ ¬ÿœúÓ
¬¢úò œÅúŒ ¬æüÊ›¼ü¤›èü››ó|šžÙ  Ù èv Ì
Ö ªžÖ
ú$«žüñ¥/üÝ£A> Get the value of the `SO_INCOMING_CPU` option on this socket.Á£¤úü«¤EB For more information about this option, see [`set_cpu_affinity`].Áõ¤úüý¤96 [`set_cpu_affinity`]: crate::Socket::set_cpu_affinityÁ»£|Å¥úò œÖ¥üÄ¥&ü»¥1dø¥Ú  Ú èv£ìÖ …¦Ö
û$†¦,¡§ûã‰üû‰ü˜Šüüûüëƒüø¨<üʧ>; Set value for the `SO_INCOMING_CPU` option on this socket.Á¨úü•¨(% Sets the CPU affinity of the socket.Á»£|̨úò œÝ¨ü˨&ü¨1„ÿ¨Û  Û èv²ãÖ ©Ö
ý$‘©cpuÁ—©ü±®,ü‰«>; Get the value of the `SO_REUSEPORT` option on this socket.ÁÌ«úüÔ«C@ For more information about this option, see [`set_reuse_port`].Áœ¬úü¤¬52 [`set_reuse_port`]: crate::Socket::set_reuse_portÁ»£|ñ¬úÓ
¬Ÿ­úÞ ¬Â­ú«
¤å­ú”‡®ü‘­ü­üç¬ÃüÞ¬ÎT¸®Ü  Ü èvÚ±Ö îÖ
þ$Ä®<Û¯þã‰ÿû‰ÿ˜Šÿÿþÿ Õüõ³;ü„°;8 Set value for the `SO_REUSEPORT` option on this socket.Áİúṵ̈Hèü™±K»Žüé±4»£|µ²úÓ
¬ã²úÞ ¬†³ú«
¤©³ú”˳üÕ²üѲü«²Ãü¢²Îtü³Ý  Ý èv²ãÖ ‹´Ö
$Œ´A,’´üüÀ-ü¦¾=: Get the value of the `IP_FREEBIND` option on this socket.Áè¾úüð¾DA For more information about this option, see [`set_freebind_v4`].Á¹¿úüÁ¿74 [`set_freebind_v4`]: crate::Socket::set_freebind_v4Á»£|ÀúŒ ¬­ÀúÊ ¬ÄÀúò œÛÀü¬ÀCü†Àoüý¿z\ƒÁÞ  Þ èvÚ±Ö ÁÖ
$ÁT¢Âã‰û‰˜Š ÕüèÆ?üÑÂ:7 Set value for the `IP_FREEBIND` option on this socket.ÁÃúü˜ÃKH If enabled, this boolean option allows binding to an IP address that isÁüèÃJG nonlocal or does not (yet) exist. This permits listening on a socket,Áü·ÄGD without requiring the underlying network interface or the specifiedÁüƒÅJG dynamic IP address to be up at the time that the application is tryingÁ”ÒÅ to bind to it.Á»£|üÅúŒ ¬™ÆúÊ ¬°Æúò œÇÆü˜ÆCüòÅoüéÅz|ïÆß  ß èv²ãÖ ÿÆÖ
ƒ$€ÇfreebindÁD†ÇüÌ-üùÈ?< Get the value of the `IPV6_FREEBIND` option on this socket.Á½ÉúüÅÉA> This is an IPv6 counterpart of `IP_FREEBIND` socket option onÁü‹Ê>; Android/Linux. For more information about this option, seeÁÄÎÊ [`set_freebind_v4`].ÁëÊúüóÊ7¦Ý
»£|¹ËúŒ ¬ÎËúò œåËüÍË,ü¸ËBü¯ËM\ˆÌà  à èvÚ±Ö ”ÌÖ
$•ÌT«Íã‰û‰˜Š ÕüªÖ?üÚÍ<9 Set value for the `IPV6_FREEBIND` option on this socket.Á›Îúü£ÎA¸å
üéÎ>„æ
ĬÏÌæ
ÉÏúüÑÏ7¦Ý
Ðút•ÐÐÀ¨Ðúl°Ð
On Linux:ÁÂÐú<ÊÐŒÆüÖÐ(% use socket2::{Domain, Socket, Type};ÁüƒÑ*' use std::io::{self, Error, ErrorKind};Á²ÑúüºÑ;8 fn enable_freebind(socket: &Socket) -> io::Result<()> {ÁüúÑ  match socket.domain()? {ÁüŸÒ:7 Domain::IPV4 => socket.set_freebind_v4(true)?,ÁüÞÒ:7 Domain::IPV6 => socket.set_freebind_v6(true)?,ÁüÓPM _ => return Err(Error::new(ErrorKind::Other, "unsupported domain")),ÁTòÓ };ÁtÔ Ok(())Á,”Ô´ížÔúü¦Ô# # fn main() -> io::Result<()> {ÁüÎÔFC # let socket = Socket::new(Domain::IPV6, Type::STREAM, None)?;Áü™Õ" # enable_freebind(&socket)Á<ÀÕÂí<ÌՌƻ£|âÕúŒ ¬÷Õúò œŽÖüöÕ,üáÕBüØÕM|±Öá  á èv²ãÖ ÁÖÖ
$ÂÖÀä
DÈÖüîâªü¿ØHE Copies data between a `file` and this socket using the `sendfile(2)`ÁüŒÙ@= system call. Because this copying is done within the kernel,ÁüÑÙHE `sendfile()` is more efficient than the combination of `read(2)` andÁüžÚFC `write(2)`, which would require transferring data to and from userÁTéÚ space.ÁøÚúü€Û@= Different OSs support different kinds of `file`s, see the OSÁüÅÛKH documentation for what kind of files are supported. Generally *regular*Áü•Ü# files are supported by all OSs.ÁøÛÅ%hü½Ü&Ó
Additional documentation can be found in manual of the OS:
* DragonFly BSD: <https://man.dragonflybsd.org/?command=sendfile&section=2>
* FreeBSD: <https://www.freebsd.org/cgi/man.cgi?query=sendfile&sektion=2>
* Linux: <https://man7.org/linux/man-pages/man2/sendfile.2.html>
* macOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendfile.2.html> (archived, actually for iOS)
* NetBSD: <https://man.netbsd.org/sendfile.2>
* OpenBSD: <https://man.openbsd.org/sendfile.2>
* iOS: <https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/sendfile.2.html> (archived)
* illumos: <https://illumos.org/man/3SOCKET/sendfile>
ÁèÜúüðÜJG The `offset` is the absolute offset into the `file` to use as startingÁT¿Ý point.ÁÎÝúüÖÝLI Depending on the OS this function *may* change the offset of `file`. ForÁü§ÞHE the best results reset the offset of the file before using it again.ÁôÞúüüÞLI The `length` determines how many bytes to send, where a length of `None`ÁüÍß(% means it will try to send all bytes.Á»£|à úÜŒ·àúŒ ¬Öàú¶ ¬ùàúå Œœáúô ´»áúò œßáúˆ œ€âú ”¡âú© ¬Áâü©à¸üƒàäüúßïDõââ ã  â èv ã ±—¢í£ìÖˆˆ ŠãÖ·‰ þâ«+±—<ä
±—$‹ãÌvž
v¿]œv<>ü×컣|ìúŒ ¬¤ìúò œ»ìü£ì,üŽìBü…ìMLÚìÉä  ä èv¢í£ìÖ íìÖÕë$îìÌ$üìž
4‘í¿]4®í±ð㉊û‰Š˜ŠŠŠŠ¨¶ üôƒOü§ýB? Set the value of the `TCP_USER_TIMEOUT` option on this socket.ÁîýúüöýVS If set, this specifies the maximum amount of time that transmitted data may remainÁüÑþ_\ unacknowledged or buffered data may remain untransmitted before TCP will forcibly close theÁìµÿ corresponding connection.Á×ÿúüßÿXU Setting `timeout` to `None` or a zero duration causes the system default timeouts toÁü¼€^[ be used. If `timeout` in milliseconds is larger than `c_uint::MAX`, the timeout is clampedÁüŸ^[ to `c_uint::MAX`. For example, when `c_uint` is a 32-bit value, this limits the timeout toÁì‚‚ approximately 49.71 days.Á»£|·‚úŒ ¬á‚úÊ ¬„ƒúò œ§ƒú«
¤ÈƒüÓ‚ü­‚Àü¤‚ˤûƒå  å èv§»²ãÖ Ö
$‘„çú<—„$î„㉌û‰Œ˜ŠŒŒŒö¸üÖŠ>ü›‡B? Get the value of the `TCP_USER_TIMEOUT` option on this socket.Áâ‡úüê‡IF For more information about this option, see [`set_tcp_user_timeout`].Á¸ˆúüÀˆA> [`set_tcp_user_timeout`]: crate::Socket::set_tcp_user_timeoutÁ»£|™‰úŒ ¬Ã‰úÊ ¬æ‰úò œ‰Šú«
¤ªŠüµ‰üÀü†‰Ë„ÝŠæ  æ èv‚ãÖ îŠÖ
$ïŠDžŒã‰Žû‰Ž˜ŠŽŽŽ§»ü½‘Eü‰Ž74 Attach Berkeley Packet Filter (BPF) on this socket.ÁÅŽúüÍŽFC BPF allows a user-space program to attach a filter onto any socketÁü˜KH and allow or disallow certain types of data to come through the socket.Áèúüðvs For more information about this option, see [filter](https://www.kernel.org/doc/html/v5.12/networking/filter.html)Á»£úò œŠ‘úŒ ¬Ÿ‘ü‰‘,üôBüëMlÄ‘ç è  ç èv è
–}²ãÖ Ò‘Ö
$Ó‘filtersÁ<Ù‘ü¶—-ü™•85 Detach Berkeley Packet Filter(BPF) from this socket.ÁÖ•úüÞ•A> For more information about this option, see [`attach_filter`]Á¤–úü¬–30 [`attach_filter`]: crate::Socket::attach_filterÁ»£|î–úò œƒ—úŒ ¬˜—ü‚—,üí–Büä–Ml½—é  é èv²ãÖ Ë—Ö
$Ì—üžœ'ü˘=: Gets the value for the `SO_COOKIE` option on this socket.Áúü•™QN The socket cookie is a unique, kernel-managed identifier tied to each socket.Áüë™63 Therefore, there is no corresponding `set` helper.Á¦šúü®šµ² For more information about this option, see [Linux patch](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5daab9db7b65df87da26fd8cfa695fb9546a1ddb)Á»£|ò›úò œƒœüñ›&üè›14¥œê  ê èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
½˜Ö ¬œÖ
$­œüˆ¢*ü¸>; Get the value of the `IPV6_TCLASS` option for this socket.ÁûúüƒžB? For more information about this option, see [`set_tclass_v6`].ÁÊžúüÒž30 [`set_tclass_v6`]: crate::Socket::set_tclass_v6Á»£|Ÿ úŒ ¬ÇŸú  ¼êŸú¶ ¬ úÊ ¬² úò œÕ úˆ œö ú
¤—¡ú
¬¹¡ú«
¤Ü¡ü¹ŸÂü“ŸîüŠŸùL¢ë  ë èvßûÖ ™¢Ö
$š¢D«£ã‰û‰˜Š­ýüˆ¨:üØ£>; Set the value of the `IPV6_TCLASS` option for this socket.Á›¤úü£¤C@ Specifies the traffic class field that is used in every packetsÁÔ뤆õ»£|¥ úŒ ¬Ç¥ú  ¼ê¥ú¶ ¬¦úÊ ¬²¦úò œÕ¦úˆ œö¦ú
¤—§ú
¬¹§ú«
¤Ü§ü¹¥Âü“¥îüŠ¥ùl¨ì  ì èv²ãÖ ¨Ö
$ž¨tclassÁ4¤¨üȬ3ü’ªA> Get the value of the `TCP_CONGESTION` option for this socket.ÁتúüàªGD For more information about this option, see [`set_tcp_congestion`].Á¬«úü´«=: [`set_tcp_congestion`]: crate::Socket::set_tcp_congestionÁ»£|€¬ú¶ ¬•¬úò œ¬¬ü”¬,üÿ«Büö«MtϬí  í èvÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ʶ
½˜Ö Þ¬Ö
$߬|œ­|³­ǯ㉘û‰˜˜Š˜˜˜£Õʶ
 ÊàÝ“ü³Füø¯A> Set the value of the `TCP_CONGESTION` option for this socket.Á¾°úüưJG Specifies the TCP congestion control algorithm to use for this socket.Á•±úü±JG The value must be a valid TCP congestion control algorithm name of theÁüì±>; platform. For example, Linux may supports "reno", "cubic".Á»£|¹²ú¶ ¬Î²úò œå²üͲ,ü¸²Bü¯²M”ˆ³î ï  î èv ï ó­²ãÖ ›³Ö
$œ³ tcp_ca_nameÁ\¢³µµã‰šû‰š˜Ššššþ¦ ü’º;üȵC@ Set value for the `DCCP_SOCKOPT_SERVICE` option on this socket.Áúü˜¶KH Sets the DCCP service. The specification mandates use of service codes.Áüè¶KH If this socket option is not set, the socket will fall back to 0 (whichÁü¸·HE means that no meaningful service code is present). On active socketsÁü…¸GD this is set before [`connect`]. On passive sockets up to 32 serviceÁüѸ,) codes can be set before calling [`bind`]Á‚¹úüй'$ [`connect`]: crate::Socket::connectÁü¶¹! [`bind`]: crate::Socket::bindÁ»£|æ¹úò œ÷¹üå¹&üܹ1„™ºð  ð èv²ãÖ ªºÖ
$«ºÞþ$±ºü´¾-ü¼FC Get the value of the `DCCP_SOCKOPT_SERVICE` option on this socket.Áè¼úüð¼C@ For more information about this option see [`set_dccp_service`]Á¸½úüÀ½96 [`set_dccp_service`]: crate::Socket::set_dccp_serviceÁ»£|ˆ¾úò œ™¾ü‡¾&üþ½1d»¾ñ  ñ èvßûÖ ȾÖ
œ$ɾüÁ7üÈ¿@= Set value for the `DCCP_SOCKOPT_CCID` option on this socket.ÁÀúü•À?< This option sets both the TX and RX CCIDs at the same time.Á»£|ãÀúò œôÀüâÀ&üÙÀ1l–Áò  ò èv²ãÖ ¤ÁÖ
$¥ÁccidÁ$«Áü¿Ä-ü°ÂFC Get the value of the `DCCP_SOCKOPT_TX_CCID` option on this socket.ÁûÂúüƒÃA> For more information about this option see [`set_dccp_ccid`].ÁÉÃúüÑÃ30 [`set_dccp_ccid`]: crate::Socket::set_dccp_ccidÁ»£|“Äúò œ¤Äü’Ä&ü‰Ä1dÆÄó  ó èvßûÖ ÓÄÖ
ž$ÔÄüâÇ-üÓÅFC Get the value of the `DCCP_SOCKOPT_RX_CCID` option on this socket.ÁžÆúü¦ÆAöº ìÆúüôÆ3Ï» »£|¶Çúò œÇÇüµÇ&ü¬Ç1déÇô  ô èvßûÖ öÇÖ
Ÿ$÷Çü“ËMüöÈKH Set value for the `DCCP_SOCKOPT_SERVER_TIMEWAIT` option on this socket.ÁÆÉúüÎÉFC Enables a listening socket to hold timewait state when closing theÁü™Ê?< connection. This option must be set after `accept` returns.Á»£|çÊúò œøÊüæÊ&üÝÊ1ÄšËõ  õ èv²ãÖ ³ËÖ
 $´Ë
hold_timewaitÁlºËüïÏ6üÊÍNK Get the value of the `DCCP_SOCKOPT_SERVER_TIMEWAIT` option on this socket.ÁÎúü¥Î96 For more information see [`set_dccp_server_timewait`]ÁãÎúüëÎIF [`set_dccp_server_timewait`]: crate::Socket::set_dccp_server_timewaitÁ»£|ÃÏúò œÔÏüÂÏ&ü¹Ï1¤öÏö  ö èvÚ±Ö ‹ÐÖ
¡$ŒÐü÷Õ?üçÑFC Set value for the `DCCP_SOCKOPT_SEND_CSCOV` option on this socket.Á²ÒúüºÒKH Both this option and `DCCP_SOCKOPT_RECV_CSCOV` are used for setting theÁüŠÓIF partial checksum coverage. The default is that checksums always coverÁüØÓEB the entire packet and that only fully covered application data isÁü¢ÔKH accepted by the receiver. Hence, when using this feature on the sender,ÁüòÔJG it must be enabled at the receiver too, with suitable choice of CsCov.Á»£|ËÕúò œÜÕüÊÕ&üÁÕ1œþÕ
»£|ªøúò œ»øü©ø&ü ø1LÝøÿ  ÿ èvßûÖ çøÖ
¬$èøü«û=üáù?< Set the value for the `SO_BUSY_POLL` option on this socket.Á¥úúü­úC¿ˆ
»£|ÿúúò œûüþú&üõú1l²û
 
èv²ãÖ ÀûÖ
­$Áû¨QLÇû¬ªÿü¾ý! Berkeley Packet Filter (BPF).Áàýúüäý" See [`Socket::attach_filter`].Á‡þúü‹þ;8 [`Socket::attach_filter`]: crate::Socket::attach_filterÁ»£|Ñþúò œæþúŒ ¬ûþüåþ,üÐþBüÇþMTµÿ–}`ïýØÄÖO¯Ìõ€4õ€É®®Àÿ»£|úò œ²úŒ ¬Çü±,üœBü“M–}±ü˜‚Aä÷ Create new `SockFilter`.Á¥‚–}°°
±Þþëþ%öþ/9ü#»£|Ƀúò œÞƒúŒ ¬óƒü݃,üȃBü¿ƒM–}³Àc³ü·„Bº„

ƒ
 
} 
 c cˆ¢cµ
 `£c¹´ `àB¤GS
ƒ
´² ¾„²
³$¿„± Å„ü†ˆ9»£|Þ‡úò œï‡ü݇&üÔ‡1Ÿµµ¬ß t‹ˆË}¶·ê!ë!· ‘ˆ\ƈ4ˈ´´ó­Ä߈,âˆ
 
Ë} 
ó­´ èˆ´
·Ÿ$éˆÜ´‰èv¹Ž,¹üÖ‰!,Ù‰
 
èvÎNÎNÛÀÐNÊ}ä+ÑNúÀä+§]òÞ^
¸ ߉¸
¹$à‰ôêŠèv»¬+»äL’‹
 
èvº œ‹º
»$üÍ‹$°~½ë½üø‹'$û‹èv°~¼¼
½sockÁ$€Œü¢ èv¿°+¿ìÉèv¾¾
¿üŠŽ$èvÁëÁüµŽ%$¸Ž°~èvÀÀ
ÁÊ}½ŽüÜ èvî+Ãüƒ1\èvÂÂ
ÃÊ}TÅ7>DÚ7WW›h›h›y›y›‹›‹›üÏ9œ›tø9®›„:¿›”Ü:Ñ›|Æ;ã›\à?äzÐÑÒÓ´µ@üò?>; Domain for IPv4 communication, corresponding to `AF_INET`.Á$¿@ÏÏäz´­Aüé@?< Domain for IPv6 communication, corresponding to `AF_INET6`.Á$·AÏÏäz´ÐBüâAEB Domain for Unix socket communication, corresponding to `AF_UNIX`.Áú”¶B¤µBü¬B$ÚBÏÏäzü¶C7ü„C-* Returns the correct domain for `address`.Á\ÃCsäzÏÏ
Ó˜ †ÜùDäzÕëÕÜ›E$žEäzÔÔ
Õ¯ £EÜÔE×ë×ÜöE$ùEäzÖÖ
ׯ þEL¬Jœ{ÙÚÛÜÝ´™Kü¼J(% Type corresponding to `SOCK_STREAM`.ÁéJúüñJ# Used for protocols such as TCP.Á4£KØØœ{¬«LüÏK'$ Type corresponding to `SOCK_DGRAM`.ÁûKúüƒL# Used for protocols such as UDP.Á,µLØØœ{¤ìMüßL&# Type corresponding to `SOCK_DCCP`.ÁŠMúü’M Used for the DCCP protocol.Á»£|ÀMúò œÑMü¿M&ü¶M1$öMØØœ{ÌÐOüžN+( Type corresponding to `SOCK_SEQPACKET`.Á»£|áNú£¤‚Oú”˜Oúê㬬OüOAüýNFü×NrüÎN}LÚOØØœ{œ‡RüŒP%" Type corresponding to `SOCK_RAW`.Á»£|ÉPúËãœ÷Pú£¤˜Qú”ºQúêã¬ÚQüéPüåP•ü¿PÁü¶PÌ‘RØØœ{̵Rœ{ßëßÌÕR$ØRœ{ÞÞ
ß¿ ÝRÌŠSáëá̪S$­Sœ{àà
á¿ ²SlâVÔ{ãäåæçèéêÔÆWüöV'$ Protocol corresponding to `ICMPv4`.Áú”¬W¤«Wü¢W4ÐWââÔ{ÔÕXü…X'$ Protocol corresponding to `ICMPv6`.Áú”»X¤ºXü±X4ßXââÔ{¼¿Yü–Y$! Protocol corresponding to `TCP`.ÁÉYââÔ{¼£ZüúY$! Protocol corresponding to `UDP`.Á­ZââÔ{Ì©[üþZ&# Protocol corresponding to `MPTCP`.Áúò œäZÜÞZ,³[ââÔ{ÄÈ\üè[%" Protocol corresponding to `DCCP`.Á»£|œ\úò œ­\ü›\&ü’\1$Ò\ââÔ{Ä^ü…]%" Protocol corresponding to `SCTP`.Á»£|¹]ú¶ ¬Î]úò œå]üÍ],ü¸]Bü¯]M$‹^ââÔ{ܼ`ü¾^(% Protocol corresponding to `UDPLITE`.Á»£|þ^úŒ ¬¨_ú¶ ¬Ë_úÊ ¬î_úò œ‘`üš_•üô^Áüë^Ì<Æ`ââÔ{ì¾bÔ{ìëììâb$åbÔ{ëë
ì» êbìŸcîëîìÃc$ÆcÔ{íí
î» ËctÅfúË㜂fú”—fúê㬫füf@üýeEüôePŒ|ðü¦i'üÚf74 Check if the message contains a truncated datagram.Ágúüžg63 This flag is only used for datagram-based sockets,ÁÜÙg not for stream sockets.Áùgúüh52 On Unix this corresponds to the `MSG_TRUNC` flag.Áü»h@= On Windows this corresponds to the `WSAEMSGSIZE` error code.Áú£¤Ši´‰iü€i!d³iŒ|ïï
ði™üþiKH A version of [`IoSliceMut`] that allows the buffer to be uninitialised.ÁÊjúüÎj'$ [`IoSliceMut`]: std::io::IoSliceMutÁ„–kš2óóâƒÛ„††L[¨PòôÅ|âƒi™EÅ|âƒññ