@@ -9,6 +9,7 @@ use crate::os::windows::io::{
99 AsRawSocket , AsSocket , BorrowedSocket , FromRawSocket , IntoRawSocket , OwnedSocket , RawSocket ,
1010} ;
1111use crate :: sys:: c;
12+ use crate :: sys:: c:: { AF_UNIX , INVALID_SOCKET , SOCK_STREAM , WSA_FLAG_OVERLAPPED , WSASocketW } ;
1213use crate :: sys:: pal:: winsock:: last_error;
1314use crate :: sys_common:: { AsInner , FromInner , IntoInner } ;
1415use crate :: time:: Duration ;
@@ -28,7 +29,7 @@ pub(super) mod netc {
2829 use crate :: sys:: c:: { self , ADDRESS_FAMILY , ADDRINFOA , SOCKADDR , SOCKET } ;
2930 // re-exports from Windows API bindings.
3031 pub use crate :: sys:: c:: {
31- ADDRESS_FAMILY as sa_family_t, ADDRINFOA as addrinfo, IP_ADD_MEMBERSHIP ,
32+ ADDRESS_FAMILY as sa_family_t, ADDRINFOA as addrinfo, AF_UNIX , IP_ADD_MEMBERSHIP ,
3233 IP_DROP_MEMBERSHIP , IP_MULTICAST_LOOP , IP_MULTICAST_TTL , IP_TTL , IPPROTO_IP , IPPROTO_IPV6 ,
3334 IPV6_ADD_MEMBERSHIP , IPV6_DROP_MEMBERSHIP , IPV6_MULTICAST_LOOP , IPV6_V6ONLY , SO_BROADCAST ,
3435 SO_RCVTIMEO , SO_SNDTIMEO , SOCK_DGRAM , SOCK_STREAM , SOCKADDR as sockaddr,
@@ -117,6 +118,16 @@ pub use crate::sys::pal::winsock::{cleanup, cvt, cvt_gai, cvt_r, startup as init
117118pub struct Socket ( OwnedSocket ) ;
118119
119120impl Socket {
121+ pub fn new_unix ( ) -> io:: Result < Socket > {
122+ let socket = unsafe {
123+ match WSASocketW ( AF_UNIX as i32 , SOCK_STREAM , 0 , ptr:: null_mut ( ) , 0 , WSA_FLAG_OVERLAPPED ) {
124+ INVALID_SOCKET => Err ( last_error ( ) ) ,
125+ n => Ok ( Socket :: from_raw ( n) ) ,
126+ }
127+ } ?;
128+ socket. 0 . set_no_inherit ( ) ;
129+ Ok ( socket)
130+ }
120131 pub fn new ( addr : & SocketAddr , ty : c_int ) -> io:: Result < Socket > {
121132 let family = match * addr {
122133 SocketAddr :: V4 ( ..) => netc:: AF_INET ,
0 commit comments