| ... | @@ -1496,6 +1496,18 @@ const AlertableSyscall = struct { | ... | @@ -1496,6 +1496,18 @@ const AlertableSyscall = struct { |
| 1496 | s.finish(); | 1496 | s.finish(); |
| 1497 | return windows.unexpectedStatus(status); | 1497 | return windows.unexpectedStatus(status); |
| 1498 | } | 1498 | } |
| | 1499 | |
| | 1500 | fn unexpectedWsaError(s: AlertableSyscall, err: ws2_32.WinsockError) Io.UnexpectedError { |
| | 1501 | @branchHint(.cold); |
| | 1502 | s.finish(); |
| | 1503 | return windows.unexpectedWsaError(err); |
| | 1504 | } |
| | 1505 | |
| | 1506 | fn wsaErrorBug(s: AlertableSyscall, err: ws2_32.WinsockError) Io.UnexpectedError { |
| | 1507 | @branchHint(.cold); |
| | 1508 | s.finish(); |
| | 1509 | return windows.wsaErrorBug(err); |
| | 1510 | } |
| 1499 | }; | 1511 | }; |
| 1500 | | 1512 | |
| 1501 | pub fn waitForApcOrAlert() void { | 1513 | pub fn waitForApcOrAlert() void { |
| ... | @@ -11692,7 +11704,7 @@ fn netListenIpWindows( | ... | @@ -11692,7 +11704,7 @@ fn netListenIpWindows( |
| 11692 | var storage: WsaAddress = undefined; | 11704 | var storage: WsaAddress = undefined; |
| 11693 | var addr_len = addressToWsa(&address, &storage); | 11705 | var addr_len = addressToWsa(&address, &storage); |
| 11694 | | 11706 | |
| 11695 | var syscall: Syscall = try .start(); | 11707 | var syscall: AlertableSyscall = try .start(); |
| 11696 | while (true) { | 11708 | while (true) { |
| 11697 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); | 11709 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); |
| 11698 | if (rc != ws2_32.SOCKET_ERROR) { | 11710 | if (rc != ws2_32.SOCKET_ERROR) { |
| ... | @@ -11710,19 +11722,14 @@ fn netListenIpWindows( | ... | @@ -11710,19 +11722,14 @@ fn netListenIpWindows( |
| 11710 | try syscall.checkCancel(); | 11722 | try syscall.checkCancel(); |
| 11711 | continue; | 11723 | continue; |
| 11712 | }, | 11724 | }, |
| 11713 | else => |e| { | 11725 | .EADDRINUSE => return syscall.fail(error.AddressInUse), |
| 11714 | syscall.finish(); | 11726 | .EADDRNOTAVAIL => return syscall.fail(error.AddressUnavailable), |
| 11715 | switch (e) { | 11727 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 11716 | .EADDRINUSE => return error.AddressInUse, | 11728 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 11717 | .EADDRNOTAVAIL => return error.AddressUnavailable, | 11729 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 11718 | .ENOTSOCK => |err| return wsaErrorBug(err), | 11730 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 11719 | .EFAULT => |err| return wsaErrorBug(err), | 11731 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 11720 | .EINVAL => |err| return wsaErrorBug(err), | 11732 | else => |err| return syscall.unexpectedWsaError(err), |
| 11721 | .ENOBUFS => return error.SystemResources, | | |
| 11722 | .ENETDOWN => return error.NetworkDown, | | |
| 11723 | else => |err| return windows.unexpectedWSAError(err), | | |
| 11724 | } | | |
| 11725 | }, | | |
| 11726 | } | 11733 | } |
| 11727 | } | 11734 | } |
| 11728 | | 11735 | |
| ... | @@ -11744,20 +11751,15 @@ fn netListenIpWindows( | ... | @@ -11744,20 +11751,15 @@ fn netListenIpWindows( |
| 11744 | try syscall.checkCancel(); | 11751 | try syscall.checkCancel(); |
| 11745 | continue; | 11752 | continue; |
| 11746 | }, | 11753 | }, |
| 11747 | else => |e| { | 11754 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 11748 | syscall.finish(); | 11755 | .EADDRINUSE => return syscall.fail(error.AddressInUse), |
| 11749 | switch (e) { | 11756 | .EMFILE, .ENOBUFS => return syscall.fail(error.SystemResources), |
| 11750 | .ENETDOWN => return error.NetworkDown, | 11757 | .EISCONN => |err| return syscall.wsaErrorBug(err), |
| 11751 | .EADDRINUSE => return error.AddressInUse, | 11758 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 11752 | .EISCONN => |err| return wsaErrorBug(err), | 11759 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 11753 | .EINVAL => |err| return wsaErrorBug(err), | 11760 | .EOPNOTSUPP => |err| return syscall.wsaErrorBug(err), |
| 11754 | .EMFILE, .ENOBUFS => return error.SystemResources, | 11761 | .EINPROGRESS => |err| return syscall.wsaErrorBug(err), |
| 11755 | .ENOTSOCK => |err| return wsaErrorBug(err), | 11762 | else => |err| return syscall.unexpectedWsaError(err), |
| 11756 | .EOPNOTSUPP => |err| return wsaErrorBug(err), | | |
| 11757 | .EINPROGRESS => |err| return wsaErrorBug(err), | | |
| 11758 | else => |err| return windows.unexpectedWSAError(err), | | |
| 11759 | } | | |
| 11760 | }, | | |
| 11761 | } | 11763 | } |
| 11762 | } | 11764 | } |
| 11763 | | 11765 | |
| ... | @@ -11841,7 +11843,7 @@ fn netListenUnixWindows( | ... | @@ -11841,7 +11843,7 @@ fn netListenUnixWindows( |
| 11841 | var storage: WsaAddress = undefined; | 11843 | var storage: WsaAddress = undefined; |
| 11842 | const addr_len = addressUnixToWsa(address, &storage); | 11844 | const addr_len = addressUnixToWsa(address, &storage); |
| 11843 | | 11845 | |
| 11844 | var syscall: Syscall = try .start(); | 11846 | var syscall: AlertableSyscall = try .start(); |
| 11845 | while (true) { | 11847 | while (true) { |
| 11846 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); | 11848 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); |
| 11847 | if (rc != ws2_32.SOCKET_ERROR) break; | 11849 | if (rc != ws2_32.SOCKET_ERROR) break; |
| ... | @@ -11856,19 +11858,14 @@ fn netListenUnixWindows( | ... | @@ -11856,19 +11858,14 @@ fn netListenUnixWindows( |
| 11856 | try syscall.checkCancel(); | 11858 | try syscall.checkCancel(); |
| 11857 | continue; | 11859 | continue; |
| 11858 | }, | 11860 | }, |
| 11859 | else => |e| { | 11861 | .EADDRINUSE => return syscall.fail(error.AddressInUse), |
| 11860 | syscall.finish(); | 11862 | .EADDRNOTAVAIL => return syscall.fail(error.AddressUnavailable), |
| 11861 | switch (e) { | 11863 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 11862 | .EADDRINUSE => return error.AddressInUse, | 11864 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 11863 | .EADDRNOTAVAIL => return error.AddressUnavailable, | 11865 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 11864 | .ENOTSOCK => |err| return wsaErrorBug(err), | 11866 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 11865 | .EFAULT => |err| return wsaErrorBug(err), | 11867 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 11866 | .EINVAL => |err| return wsaErrorBug(err), | 11868 | else => |err| return syscall.unexpectedWsaError(err), |
| 11867 | .ENOBUFS => return error.SystemResources, | | |
| 11868 | .ENETDOWN => return error.NetworkDown, | | |
| 11869 | else => |err| return windows.unexpectedWSAError(err), | | |
| 11870 | } | | |
| 11871 | }, | | |
| 11872 | } | 11869 | } |
| 11873 | } | 11870 | } |
| 11874 | | 11871 | |
| ... | @@ -11887,20 +11884,15 @@ fn netListenUnixWindows( | ... | @@ -11887,20 +11884,15 @@ fn netListenUnixWindows( |
| 11887 | syscall = try .start(); | 11884 | syscall = try .start(); |
| 11888 | continue; | 11885 | continue; |
| 11889 | }, | 11886 | }, |
| 11890 | else => |e| { | 11887 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 11891 | syscall.finish(); | 11888 | .EADDRINUSE => return syscall.fail(error.AddressInUse), |
| 11892 | switch (e) { | 11889 | .EMFILE, .ENOBUFS => return syscall.fail(error.SystemResources), |
| 11893 | .ENETDOWN => return error.NetworkDown, | 11890 | .EISCONN => |err| return syscall.wsaErrorBug(err), |
| 11894 | .EADDRINUSE => return error.AddressInUse, | 11891 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 11895 | .EISCONN => |err| return wsaErrorBug(err), | 11892 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 11896 | .EINVAL => |err| return wsaErrorBug(err), | 11893 | .EOPNOTSUPP => |err| return syscall.wsaErrorBug(err), |
| 11897 | .EMFILE, .ENOBUFS => return error.SystemResources, | 11894 | .EINPROGRESS => |err| return syscall.wsaErrorBug(err), |
| 11898 | .ENOTSOCK => |err| return wsaErrorBug(err), | 11895 | else => |err| return syscall.unexpectedWsaError(err), |
| 11899 | .EOPNOTSUPP => |err| return wsaErrorBug(err), | | |
| 11900 | .EINPROGRESS => |err| return wsaErrorBug(err), | | |
| 11901 | else => |err| return windows.unexpectedWSAError(err), | | |
| 11902 | } | | |
| 11903 | }, | | |
| 11904 | } | 11896 | } |
| 11905 | } | 11897 | } |
| 11906 | } | 11898 | } |
| ... | @@ -12111,7 +12103,7 @@ fn wsaGetSockName( | ... | @@ -12111,7 +12103,7 @@ fn wsaGetSockName( |
| 12111 | addr: *ws2_32.sockaddr, | 12103 | addr: *ws2_32.sockaddr, |
| 12112 | addr_len: *i32, | 12104 | addr_len: *i32, |
| 12113 | ) !void { | 12105 | ) !void { |
| 12114 | var syscall: Syscall = try .start(); | 12106 | var syscall: AlertableSyscall = try .start(); |
| 12115 | while (true) { | 12107 | while (true) { |
| 12116 | const rc = ws2_32.getsockname(handle, addr, addr_len); | 12108 | const rc = ws2_32.getsockname(handle, addr, addr_len); |
| 12117 | if (rc != ws2_32.SOCKET_ERROR) { | 12109 | if (rc != ws2_32.SOCKET_ERROR) { |
| ... | @@ -12129,16 +12121,11 @@ fn wsaGetSockName( | ... | @@ -12129,16 +12121,11 @@ fn wsaGetSockName( |
| 12129 | syscall = try .start(); | 12121 | syscall = try .start(); |
| 12130 | continue; | 12122 | continue; |
| 12131 | }, | 12123 | }, |
| 12132 | else => |e| { | 12124 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 12133 | syscall.finish(); | 12125 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 12134 | switch (e) { | 12126 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 12135 | .ENETDOWN => return error.NetworkDown, | 12127 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12136 | .EFAULT => |err| return wsaErrorBug(err), | 12128 | else => |err| return syscall.unexpectedWsaError(err), |
| 12137 | .ENOTSOCK => |err| return wsaErrorBug(err), | | |
| 12138 | .EINVAL => |err| return wsaErrorBug(err), | | |
| 12139 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12140 | } | | |
| 12141 | }, | | |
| 12142 | } | 12129 | } |
| 12143 | } | 12130 | } |
| 12144 | } | 12131 | } |
| ... | @@ -12172,7 +12159,7 @@ fn setSocketOption(fd: posix.fd_t, level: i32, opt_name: u32, option: u32) !void | ... | @@ -12172,7 +12159,7 @@ fn setSocketOption(fd: posix.fd_t, level: i32, opt_name: u32, option: u32) !void |
| 12172 | | 12159 | |
| 12173 | fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, opt_name: u32, option: u32) !void { | 12160 | fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, opt_name: u32, option: u32) !void { |
| 12174 | const o: []const u8 = @ptrCast(&option); | 12161 | const o: []const u8 = @ptrCast(&option); |
| 12175 | var syscall: Syscall = try .start(); | 12162 | var syscall: AlertableSyscall = try .start(); |
| 12176 | const rc = ws2_32.setsockopt(socket, level, @bitCast(opt_name), o.ptr, @intCast(o.len)); | 12163 | const rc = ws2_32.setsockopt(socket, level, @bitCast(opt_name), o.ptr, @intCast(o.len)); |
| 12177 | while (true) { | 12164 | while (true) { |
| 12178 | if (rc != ws2_32.SOCKET_ERROR) return syscall.finish(); | 12165 | if (rc != ws2_32.SOCKET_ERROR) return syscall.finish(); |
| ... | @@ -12188,14 +12175,8 @@ fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, op | ... | @@ -12188,14 +12175,8 @@ fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, op |
| 12188 | continue; | 12175 | continue; |
| 12189 | }, | 12176 | }, |
| 12190 | .ENETDOWN => return syscall.fail(error.NetworkDown), | 12177 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 12191 | .EFAULT, .ENOTSOCK, .EINVAL => |err| { | 12178 | .EFAULT, .ENOTSOCK, .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12192 | syscall.finish(); | 12179 | else => |err| return syscall.unexpectedWsaError(err), |
| 12193 | return wsaErrorBug(err); | | |
| 12194 | }, | | |
| 12195 | else => |err| { | | |
| 12196 | syscall.finish(); | | |
| 12197 | return windows.unexpectedWSAError(err); | | |
| 12198 | }, | | |
| 12199 | } | 12180 | } |
| 12200 | } | 12181 | } |
| 12201 | } | 12182 | } |
| ... | @@ -12243,7 +12224,7 @@ fn netConnectIpWindows( | ... | @@ -12243,7 +12224,7 @@ fn netConnectIpWindows( |
| 12243 | var storage: WsaAddress = undefined; | 12224 | var storage: WsaAddress = undefined; |
| 12244 | var addr_len = addressToWsa(address, &storage); | 12225 | var addr_len = addressToWsa(address, &storage); |
| 12245 | | 12226 | |
| 12246 | var syscall: Syscall = try .start(); | 12227 | var syscall: AlertableSyscall = try .start(); |
| 12247 | while (true) { | 12228 | while (true) { |
| 12248 | const rc = ws2_32.connect(socket_handle, &storage.any, addr_len); | 12229 | const rc = ws2_32.connect(socket_handle, &storage.any, addr_len); |
| 12249 | if (rc != ws2_32.SOCKET_ERROR) { | 12230 | if (rc != ws2_32.SOCKET_ERROR) { |
| ... | @@ -12261,26 +12242,21 @@ fn netConnectIpWindows( | ... | @@ -12261,26 +12242,21 @@ fn netConnectIpWindows( |
| 12261 | syscall = try .start(); | 12242 | syscall = try .start(); |
| 12262 | continue; | 12243 | continue; |
| 12263 | }, | 12244 | }, |
| 12264 | else => |e| { | 12245 | .EADDRNOTAVAIL => return syscall.fail(error.AddressUnavailable), |
| 12265 | syscall.finish(); | 12246 | .ECONNREFUSED => return syscall.fail(error.ConnectionRefused), |
| 12266 | switch (e) { | 12247 | .ECONNRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 12267 | .EADDRNOTAVAIL => return error.AddressUnavailable, | 12248 | .ETIMEDOUT => return syscall.fail(error.Timeout), |
| 12268 | .ECONNREFUSED => return error.ConnectionRefused, | 12249 | .EHOSTUNREACH => return syscall.fail(error.HostUnreachable), |
| 12269 | .ECONNRESET => return error.ConnectionResetByPeer, | 12250 | .ENETUNREACH => return syscall.fail(error.NetworkUnreachable), |
| 12270 | .ETIMEDOUT => return error.Timeout, | 12251 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 12271 | .EHOSTUNREACH => return error.HostUnreachable, | 12252 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12272 | .ENETUNREACH => return error.NetworkUnreachable, | 12253 | .EISCONN => |err| return syscall.wsaErrorBug(err), |
| 12273 | .EFAULT => |err| return wsaErrorBug(err), | 12254 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 12274 | .EINVAL => |err| return wsaErrorBug(err), | 12255 | .EWOULDBLOCK => return syscall.fail(error.WouldBlock), |
| 12275 | .EISCONN => |err| return wsaErrorBug(err), | 12256 | .EACCES => return syscall.fail(error.AccessDenied), |
| 12276 | .ENOTSOCK => |err| return wsaErrorBug(err), | 12257 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 12277 | .EWOULDBLOCK => return error.WouldBlock, | 12258 | .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported), |
| 12278 | .EACCES => return error.AccessDenied, | 12259 | else => |err| return syscall.unexpectedWsaError(err), |
| 12279 | .ENOBUFS => return error.SystemResources, | | |
| 12280 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, | | |
| 12281 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12282 | } | | |
| 12283 | }, | | |
| 12284 | } | 12260 | } |
| 12285 | } | 12261 | } |
| 12286 | | 12262 | |
| ... | @@ -12334,7 +12310,7 @@ fn netConnectUnixWindows( | ... | @@ -12334,7 +12310,7 @@ fn netConnectUnixWindows( |
| 12334 | var storage: WsaAddress = undefined; | 12310 | var storage: WsaAddress = undefined; |
| 12335 | const addr_len = addressUnixToWsa(address, &storage); | 12311 | const addr_len = addressUnixToWsa(address, &storage); |
| 12336 | | 12312 | |
| 12337 | var syscall: Syscall = try .start(); | 12313 | var syscall: AlertableSyscall = try .start(); |
| 12338 | while (true) { | 12314 | while (true) { |
| 12339 | const rc = ws2_32.connect(socket_handle, &storage.any, addr_len); | 12315 | const rc = ws2_32.connect(socket_handle, &storage.any, addr_len); |
| 12340 | if (rc != ws2_32.SOCKET_ERROR) break; | 12316 | if (rc != ws2_32.SOCKET_ERROR) break; |
| ... | @@ -12349,21 +12325,16 @@ fn netConnectUnixWindows( | ... | @@ -12349,21 +12325,16 @@ fn netConnectUnixWindows( |
| 12349 | syscall = try .start(); | 12325 | syscall = try .start(); |
| 12350 | continue; | 12326 | continue; |
| 12351 | }, | 12327 | }, |
| 12352 | else => |e| { | 12328 | .ECONNREFUSED => return syscall.fail(error.FileNotFound), |
| 12353 | syscall.finish(); | 12329 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 12354 | switch (e) { | 12330 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12355 | .ECONNREFUSED => return error.FileNotFound, | 12331 | .EISCONN => |err| return syscall.wsaErrorBug(err), |
| 12356 | .EFAULT => |err| return wsaErrorBug(err), | 12332 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 12357 | .EINVAL => |err| return wsaErrorBug(err), | 12333 | .EWOULDBLOCK => return syscall.fail(error.WouldBlock), |
| 12358 | .EISCONN => |err| return wsaErrorBug(err), | 12334 | .EACCES => return syscall.fail(error.AccessDenied), |
| 12359 | .ENOTSOCK => |err| return wsaErrorBug(err), | 12335 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 12360 | .EWOULDBLOCK => return error.WouldBlock, | 12336 | .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported), |
| 12361 | .EACCES => return error.AccessDenied, | 12337 | else => |err| return syscall.unexpectedWsaError(err), |
| 12362 | .ENOBUFS => return error.SystemResources, | | |
| 12363 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, | | |
| 12364 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12365 | } | | |
| 12366 | }, | | |
| 12367 | } | 12338 | } |
| 12368 | } | 12339 | } |
| 12369 | | 12340 | |
| ... | @@ -12417,7 +12388,7 @@ fn netBindIpWindows( | ... | @@ -12417,7 +12388,7 @@ fn netBindIpWindows( |
| 12417 | var storage: WsaAddress = undefined; | 12388 | var storage: WsaAddress = undefined; |
| 12418 | var addr_len = addressToWsa(address, &storage); | 12389 | var addr_len = addressToWsa(address, &storage); |
| 12419 | | 12390 | |
| 12420 | var syscall: Syscall = try .start(); | 12391 | var syscall: AlertableSyscall = try .start(); |
| 12421 | while (true) { | 12392 | while (true) { |
| 12422 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); | 12393 | const rc = ws2_32.bind(socket_handle, &storage.any, addr_len); |
| 12423 | if (rc != ws2_32.SOCKET_ERROR) { | 12394 | if (rc != ws2_32.SOCKET_ERROR) { |
| ... | @@ -12435,19 +12406,14 @@ fn netBindIpWindows( | ... | @@ -12435,19 +12406,14 @@ fn netBindIpWindows( |
| 12435 | syscall = try .start(); | 12406 | syscall = try .start(); |
| 12436 | continue; | 12407 | continue; |
| 12437 | }, | 12408 | }, |
| 12438 | else => |e| { | 12409 | .EADDRINUSE => return syscall.fail(error.AddressInUse), |
| 12439 | syscall.finish(); | 12410 | .EADDRNOTAVAIL => return syscall.fail(error.AddressUnavailable), |
| 12440 | switch (e) { | 12411 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 12441 | .EADDRINUSE => return error.AddressInUse, | 12412 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 12442 | .EADDRNOTAVAIL => return error.AddressUnavailable, | 12413 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12443 | .ENOTSOCK => |err| return wsaErrorBug(err), | 12414 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 12444 | .EFAULT => |err| return wsaErrorBug(err), | 12415 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 12445 | .EINVAL => |err| return wsaErrorBug(err), | 12416 | else => |err| return syscall.unexpectedWsaError(err), |
| 12446 | .ENOBUFS => return error.SystemResources, | | |
| 12447 | .ENETDOWN => return error.NetworkDown, | | |
| 12448 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12449 | } | | |
| 12450 | }, | | |
| 12451 | } | 12417 | } |
| 12452 | } | 12418 | } |
| 12453 | | 12419 | |
| ... | @@ -12611,10 +12577,8 @@ fn openSocketWsa( | ... | @@ -12611,10 +12577,8 @@ fn openSocketWsa( |
| 12611 | const protocol = posixProtocol(options.protocol); | 12577 | const protocol = posixProtocol(options.protocol); |
| 12612 | // WSA_FLAG_OVERLAPPED is chosen here because without this different | 12578 | // WSA_FLAG_OVERLAPPED is chosen here because without this different |
| 12613 | // threads cannot use the same open socket handle. | 12579 | // threads cannot use the same open socket handle. |
| 12614 | // TODO: the below code needs to use the AlertableSyscall mechanism instead in | | |
| 12615 | // order to make cancelation work. | | |
| 12616 | const flags: u32 = ws2_32.WSA_FLAG_OVERLAPPED | ws2_32.WSA_FLAG_NO_HANDLE_INHERIT; | 12580 | const flags: u32 = ws2_32.WSA_FLAG_OVERLAPPED | ws2_32.WSA_FLAG_NO_HANDLE_INHERIT; |
| 12617 | var syscall: Syscall = try .start(); | 12581 | var syscall: AlertableSyscall = try .start(); |
| 12618 | while (true) { | 12582 | while (true) { |
| 12619 | const rc = ws2_32.WSASocketW(family, @bitCast(mode), @bitCast(protocol), null, 0, flags); | 12583 | const rc = ws2_32.WSASocketW(family, @bitCast(mode), @bitCast(protocol), null, 0, flags); |
| 12620 | if (rc != ws2_32.INVALID_SOCKET) { | 12584 | if (rc != ws2_32.INVALID_SOCKET) { |
| ... | @@ -12632,16 +12596,11 @@ fn openSocketWsa( | ... | @@ -12632,16 +12596,11 @@ fn openSocketWsa( |
| 12632 | syscall = try .start(); | 12596 | syscall = try .start(); |
| 12633 | continue; | 12597 | continue; |
| 12634 | }, | 12598 | }, |
| 12635 | else => |e| { | 12599 | .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported), |
| 12636 | syscall.finish(); | 12600 | .EMFILE => return syscall.fail(error.ProcessFdQuotaExceeded), |
| 12637 | switch (e) { | 12601 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 12638 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, | 12602 | .EPROTONOSUPPORT => return syscall.fail(error.ProtocolUnsupportedByAddressFamily), |
| 12639 | .EMFILE => return error.ProcessFdQuotaExceeded, | 12603 | else => |err| return syscall.unexpectedWsaError(err), |
| 12640 | .ENOBUFS => return error.SystemResources, | | |
| 12641 | .EPROTONOSUPPORT => return error.ProtocolUnsupportedByAddressFamily, | | |
| 12642 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12643 | } | | |
| 12644 | }, | | |
| 12645 | } | 12604 | } |
| 12646 | } | 12605 | } |
| 12647 | } | 12606 | } |
| ... | @@ -12702,7 +12661,7 @@ fn netAcceptWindows(userdata: ?*anyopaque, listen_handle: net.Socket.Handle) net | ... | @@ -12702,7 +12661,7 @@ fn netAcceptWindows(userdata: ?*anyopaque, listen_handle: net.Socket.Handle) net |
| 12702 | const t: *Threaded = @ptrCast(@alignCast(userdata)); | 12661 | const t: *Threaded = @ptrCast(@alignCast(userdata)); |
| 12703 | var storage: WsaAddress = undefined; | 12662 | var storage: WsaAddress = undefined; |
| 12704 | var addr_len: i32 = @sizeOf(WsaAddress); | 12663 | var addr_len: i32 = @sizeOf(WsaAddress); |
| 12705 | var syscall: Syscall = try .start(); | 12664 | var syscall: AlertableSyscall = try .start(); |
| 12706 | while (true) { | 12665 | while (true) { |
| 12707 | const rc = ws2_32.accept(listen_handle, &storage.any, &addr_len); | 12666 | const rc = ws2_32.accept(listen_handle, &storage.any, &addr_len); |
| 12708 | if (rc != ws2_32.INVALID_SOCKET) { | 12667 | if (rc != ws2_32.INVALID_SOCKET) { |
| ... | @@ -12723,20 +12682,15 @@ fn netAcceptWindows(userdata: ?*anyopaque, listen_handle: net.Socket.Handle) net | ... | @@ -12723,20 +12682,15 @@ fn netAcceptWindows(userdata: ?*anyopaque, listen_handle: net.Socket.Handle) net |
| 12723 | syscall = try .start(); | 12682 | syscall = try .start(); |
| 12724 | continue; | 12683 | continue; |
| 12725 | }, | 12684 | }, |
| 12726 | else => |e| { | 12685 | .ECONNRESET => return syscall.fail(error.ConnectionAborted), |
| 12727 | syscall.finish(); | 12686 | .EMFILE => return syscall.fail(error.ProcessFdQuotaExceeded), |
| 12728 | switch (e) { | 12687 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 12729 | .ECONNRESET => return error.ConnectionAborted, | 12688 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 12730 | .EFAULT => |err| return wsaErrorBug(err), | 12689 | .EFAULT => |err| return syscall.wsaErrorBug(err), |
| 12731 | .ENOTSOCK => |err| return wsaErrorBug(err), | 12690 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 12732 | .EINVAL => |err| return wsaErrorBug(err), | 12691 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12733 | .EMFILE => return error.ProcessFdQuotaExceeded, | 12692 | .EOPNOTSUPP => |err| return syscall.wsaErrorBug(err), |
| 12734 | .ENETDOWN => return error.NetworkDown, | 12693 | else => |err| return syscall.unexpectedWsaError(err), |
| 12735 | .ENOBUFS => return error.SystemResources, | | |
| 12736 | .EOPNOTSUPP => |err| return wsaErrorBug(err), | | |
| 12737 | else => |err| return windows.unexpectedWSAError(err), | | |
| 12738 | } | | |
| 12739 | }, | | |
| 12740 | } | 12694 | } |
| 12741 | } | 12695 | } |
| 12742 | } | 12696 | } |
| ... | @@ -12859,7 +12813,7 @@ fn netReadWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, data: [][]u8 | ... | @@ -12859,7 +12813,7 @@ fn netReadWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, data: [][]u8 |
| 12859 | break :b bufs; | 12813 | break :b bufs; |
| 12860 | }; | 12814 | }; |
| 12861 | | 12815 | |
| 12862 | var syscall: Syscall = try .start(); | 12816 | var syscall: AlertableSyscall = try .start(); |
| 12863 | while (true) { | 12817 | while (true) { |
| 12864 | var flags: u32 = 0; | 12818 | var flags: u32 = 0; |
| 12865 | var n: u32 = undefined; | 12819 | var n: u32 = undefined; |
| ... | @@ -12885,15 +12839,9 @@ fn netReadWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, data: [][]u8 | ... | @@ -12885,15 +12839,9 @@ fn netReadWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, data: [][]u8 |
| 12885 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), | 12839 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 12886 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), | 12840 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 12887 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. | 12841 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. |
| 12888 | | 12842 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 12889 | else => |err| { | 12843 | .EMSGSIZE => |err| return syscall.wsaErrorBug(err), |
| 12890 | syscall.finish(); | 12844 | else => |err| return syscall.unexpectedWsaError(err), |
| 12891 | switch (err) { | | |
| 12892 | .EINVAL => return wsaErrorBug(err), | | |
| 12893 | .EMSGSIZE => return wsaErrorBug(err), | | |
| 12894 | else => return windows.unexpectedWSAError(err), | | |
| 12895 | } | | |
| 12896 | }, | | |
| 12897 | } | 12845 | } |
| 12898 | } | 12846 | } |
| 12899 | } | 12847 | } |
| ... | @@ -12967,7 +12915,7 @@ fn netSendWindowsOne( | ... | @@ -12967,7 +12915,7 @@ fn netSendWindowsOne( |
| 12967 | var n: u32 = undefined; | 12915 | var n: u32 = undefined; |
| 12968 | var address: WsaAddress = undefined; | 12916 | var address: WsaAddress = undefined; |
| 12969 | const address_size = addressToWsa(message.address, &address); | 12917 | const address_size = addressToWsa(message.address, &address); |
| 12970 | var syscall: Syscall = try .start(); | 12918 | var syscall: AlertableSyscall = try .start(); |
| 12971 | while (true) { | 12919 | while (true) { |
| 12972 | const rc = ws2_32.WSASendTo( | 12920 | const rc = ws2_32.WSASendTo( |
| 12973 | handle, | 12921 | handle, |
| ... | @@ -13001,15 +12949,9 @@ fn netSendWindowsOne( | ... | @@ -13001,15 +12949,9 @@ fn netSendWindowsOne( |
| 13001 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), | 12949 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13002 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), | 12950 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13003 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. | 12951 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. |
| 13004 | | 12952 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 13005 | else => |err| { | 12953 | .EMSGSIZE => |err| return syscall.wsaErrorBug(err), |
| 13006 | syscall.finish(); | 12954 | else => |err| return syscall.unexpectedWsaError(err), |
| 13007 | switch (err) { | | |
| 13008 | .EINVAL => return wsaErrorBug(err), | | |
| 13009 | .EMSGSIZE => return wsaErrorBug(err), | | |
| 13010 | else => return windows.unexpectedWSAError(err), | | |
| 13011 | } | | |
| 13012 | }, | | |
| 13013 | } | 12955 | } |
| 13014 | } | 12956 | } |
| 13015 | } | 12957 | } |
| ... | @@ -13045,7 +12987,7 @@ fn netSendOne( | ... | @@ -13045,7 +12987,7 @@ fn netSendOne( |
| 13045 | .controllen = @intCast(message.control.len), | 12987 | .controllen = @intCast(message.control.len), |
| 13046 | .flags = 0, | 12988 | .flags = 0, |
| 13047 | }; | 12989 | }; |
| 13048 | var syscall: Syscall = try .start(); | 12990 | var syscall: if (is_windows) AlertableSyscall else Syscall = try .start(); |
| 13049 | while (true) { | 12991 | while (true) { |
| 13050 | const rc = posix.system.sendmsg(handle, &msg, flags); | 12992 | const rc = posix.system.sendmsg(handle, &msg, flags); |
| 13051 | if (is_windows) { | 12993 | if (is_windows) { |
| ... | @@ -13065,28 +13007,23 @@ fn netSendOne( | ... | @@ -13065,28 +13007,23 @@ fn netSendOne( |
| 13065 | syscall = try .start(); | 13007 | syscall = try .start(); |
| 13066 | continue; | 13008 | continue; |
| 13067 | }, | 13009 | }, |
| 13068 | else => |e| { | 13010 | .EACCES => return syscall.fail(error.AccessDenied), |
| 13069 | syscall.finish(); | 13011 | .EADDRNOTAVAIL => return syscall.fail(error.AddressUnavailable), |
| 13070 | switch (e) { | 13012 | .ECONNRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13071 | .EACCES => return error.AccessDenied, | 13013 | .EMSGSIZE => return syscall.fail(error.MessageOversize), |
| 13072 | .EADDRNOTAVAIL => return error.AddressUnavailable, | 13014 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 13073 | .ECONNRESET => return error.ConnectionResetByPeer, | 13015 | .ENOTSOCK => return syscall.fail(error.FileDescriptorNotASocket), |
| 13074 | .EMSGSIZE => return error.MessageOversize, | 13016 | .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported), |
| 13075 | .ENOBUFS => return error.SystemResources, | 13017 | .EHOSTUNREACH => return syscall.fail(error.NetworkUnreachable), |
| 13076 | .ENOTSOCK => return error.FileDescriptorNotASocket, | 13018 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 13077 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, | 13019 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13078 | .EDESTADDRREQ => unreachable, // A destination address is required. | 13020 | .ENETUNREACH => return syscall.fail(error.NetworkUnreachable), |
| 13079 | .EFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small. | 13021 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13080 | .EHOSTUNREACH => return error.NetworkUnreachable, | 13022 | .EDESTADDRREQ => unreachable, // A destination address is required. |
| 13081 | .EINVAL => unreachable, | 13023 | .EFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small. |
| 13082 | .ENETDOWN => return error.NetworkDown, | 13024 | .EINVAL => unreachable, |
| 13083 | .ENETRESET => return error.ConnectionResetByPeer, | 13025 | .ESHUTDOWN => |err| return syscall.wsaErrorBug(err), |
| 13084 | .ENETUNREACH => return error.NetworkUnreachable, | 13026 | else => |err| return syscall.unexpectedWsaError(err), |
| 13085 | .ENOTCONN => return error.SocketUnconnected, | | |
| 13086 | .ESHUTDOWN => |err| return wsaErrorBug(err), | | |
| 13087 | else => |err| return windows.unexpectedWSAError(err), | | |
| 13088 | } | | |
| 13089 | }, | | |
| 13090 | } | 13027 | } |
| 13091 | } | 13028 | } |
| 13092 | switch (posix.errno(rc)) { | 13029 | switch (posix.errno(rc)) { |
| ... | @@ -13099,31 +13036,26 @@ fn netSendOne( | ... | @@ -13099,31 +13036,26 @@ fn netSendOne( |
| 13099 | try syscall.checkCancel(); | 13036 | try syscall.checkCancel(); |
| 13100 | continue; | 13037 | continue; |
| 13101 | }, | 13038 | }, |
| 13102 | else => |e| { | 13039 | .ACCES => return syscall.fail(error.AccessDenied), |
| 13103 | syscall.finish(); | 13040 | .ALREADY => return syscall.fail(error.FastOpenAlreadyInProgress), |
| 13104 | switch (e) { | 13041 | .CONNRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13105 | .ACCES => return error.AccessDenied, | 13042 | .MSGSIZE => return syscall.fail(error.MessageOversize), |
| 13106 | .ALREADY => return error.FastOpenAlreadyInProgress, | 13043 | .NOBUFS => return syscall.fail(error.SystemResources), |
| 13107 | .BADF => |err| return errnoBug(err), // File descriptor used after closed. | 13044 | .NOMEM => return syscall.fail(error.SystemResources), |
| 13108 | .CONNRESET => return error.ConnectionResetByPeer, | 13045 | .PIPE => return syscall.fail(error.SocketUnconnected), |
| 13109 | .DESTADDRREQ => |err| return errnoBug(err), | 13046 | .AFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported), |
| 13110 | .FAULT => |err| return errnoBug(err), | 13047 | .HOSTUNREACH => return syscall.fail(error.HostUnreachable), |
| 13111 | .INVAL => |err| return errnoBug(err), | 13048 | .NETUNREACH => return syscall.fail(error.NetworkUnreachable), |
| 13112 | .ISCONN => |err| return errnoBug(err), | 13049 | .NOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13113 | .MSGSIZE => return error.MessageOversize, | 13050 | .NETDOWN => return syscall.fail(error.NetworkDown), |
| 13114 | .NOBUFS => return error.SystemResources, | 13051 | .BADF => |err| return syscall.errnoBug(err), // File descriptor used after closed. |
| 13115 | .NOMEM => return error.SystemResources, | 13052 | .DESTADDRREQ => |err| return syscall.errnoBug(err), |
| 13116 | .NOTSOCK => |err| return errnoBug(err), | 13053 | .FAULT => |err| return syscall.errnoBug(err), |
| 13117 | .OPNOTSUPP => |err| return errnoBug(err), | 13054 | .INVAL => |err| return syscall.errnoBug(err), |
| 13118 | .PIPE => return error.SocketUnconnected, | 13055 | .ISCONN => |err| return syscall.errnoBug(err), |
| 13119 | .AFNOSUPPORT => return error.AddressFamilyUnsupported, | 13056 | .NOTSOCK => |err| return syscall.errnoBug(err), |
| 13120 | .HOSTUNREACH => return error.HostUnreachable, | 13057 | .OPNOTSUPP => |err| return syscall.errnoBug(err), |
| 13121 | .NETUNREACH => return error.NetworkUnreachable, | 13058 | else => |err| return syscall.unexpectedErrno(err), |
| 13122 | .NOTCONN => return error.SocketUnconnected, | | |
| 13123 | .NETDOWN => return error.NetworkDown, | | |
| 13124 | else => |err| return posix.unexpectedErrno(err), | | |
| 13125 | } | | |
| 13126 | }, | | |
| 13127 | } | 13059 | } |
| 13128 | } | 13060 | } |
| 13129 | } | 13061 | } |
| ... | @@ -13308,9 +13240,9 @@ fn netReceiveWindowsOne( | ... | @@ -13308,9 +13240,9 @@ fn netReceiveWindowsOne( |
| 13308 | .len = std.math.cast(u32, data_buffer.len) orelse return error.MessageOversize, | 13240 | .len = std.math.cast(u32, data_buffer.len) orelse return error.MessageOversize, |
| 13309 | }; | 13241 | }; |
| 13310 | var n: u32 = undefined; | 13242 | var n: u32 = undefined; |
| 13311 | var syscall: Syscall = try .start(); | | |
| 13312 | var from_storage: WsaAddress = undefined; | 13243 | var from_storage: WsaAddress = undefined; |
| 13313 | var from_storage_len: i32 = @sizeOf(WsaAddress); | 13244 | var from_storage_len: i32 = @sizeOf(WsaAddress); |
| | 13245 | var syscall: AlertableSyscall = try .start(); |
| 13314 | | 13246 | |
| 13315 | while (true) { | 13247 | while (true) { |
| 13316 | const rc = ws2_32.WSARecvFrom( | 13248 | const rc = ws2_32.WSARecvFrom( |
| ... | @@ -13351,21 +13283,14 @@ fn netReceiveWindowsOne( | ... | @@ -13351,21 +13283,14 @@ fn netReceiveWindowsOne( |
| 13351 | syscall = try .start(); | 13283 | syscall = try .start(); |
| 13352 | continue; | 13284 | continue; |
| 13353 | }, | 13285 | }, |
| 13354 | | | |
| 13355 | .ECONNRESET => return syscall.fail(error.ConnectionResetByPeer), | 13286 | .ECONNRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13356 | .ENETDOWN => return syscall.fail(error.NetworkDown), | 13287 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 13357 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), | 13288 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13358 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), | 13289 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13359 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. | 13290 | .EFAULT => unreachable, // a pointer is not completely contained in user address space. |
| 13360 | | 13291 | .EINVAL => |err| return syscall.wsaErrorBug(err), |
| 13361 | else => |err| { | 13292 | .EMSGSIZE => |err| return syscall.wsaErrorBug(err), |
| 13362 | syscall.finish(); | 13293 | else => |err| return syscall.unexpectedWsaError(err), |
| 13363 | switch (err) { | | |
| 13364 | .EINVAL => return wsaErrorBug(err), | | |
| 13365 | .EMSGSIZE => return wsaErrorBug(err), | | |
| 13366 | else => return windows.unexpectedWSAError(err), | | |
| 13367 | } | | |
| 13368 | }, | | |
| 13369 | } | 13294 | } |
| 13370 | } | 13295 | } |
| 13371 | } | 13296 | } |
| ... | @@ -13505,7 +13430,7 @@ fn netWriteWindows( | ... | @@ -13505,7 +13430,7 @@ fn netWriteWindows( |
| 13505 | }, | 13430 | }, |
| 13506 | }; | 13431 | }; |
| 13507 | | 13432 | |
| 13508 | var syscall: Syscall = try .start(); | 13433 | var syscall: AlertableSyscall = try .start(); |
| 13509 | while (true) { | 13434 | while (true) { |
| 13510 | var n: u32 = undefined; | 13435 | var n: u32 = undefined; |
| 13511 | const rc = ws2_32.WSASend(handle, &iovecs, len, &n, 0, null, null); | 13436 | const rc = ws2_32.WSASend(handle, &iovecs, len, &n, 0, null, null); |
| ... | @@ -13533,16 +13458,10 @@ fn netWriteWindows( | ... | @@ -13533,16 +13458,10 @@ fn netWriteWindows( |
| 13533 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), | 13458 | .ENETRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13534 | .ENOBUFS => return syscall.fail(error.SystemResources), | 13459 | .ENOBUFS => return syscall.fail(error.SystemResources), |
| 13535 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), | 13460 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13536 | | 13461 | .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 13537 | else => |err| { | 13462 | .EOPNOTSUPP => |err| return syscall.wsaErrorBug(err), |
| 13538 | syscall.finish(); | 13463 | .ESHUTDOWN => |err| return syscall.wsaErrorBug(err), |
| 13539 | switch (err) { | 13464 | else => |err| return syscall.unexpectedWsaError(err), |
| 13540 | .ENOTSOCK => return wsaErrorBug(err), | | |
| 13541 | .EOPNOTSUPP => return wsaErrorBug(err), | | |
| 13542 | .ESHUTDOWN => return wsaErrorBug(err), | | |
| 13543 | else => return windows.unexpectedWSAError(err), | | |
| 13544 | } | | |
| 13545 | }, | | |
| 13546 | } | 13465 | } |
| 13547 | } | 13466 | } |
| 13548 | } | 13467 | } |
| ... | @@ -13651,7 +13570,7 @@ fn netShutdownWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, how: net | ... | @@ -13651,7 +13570,7 @@ fn netShutdownWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, how: net |
| 13651 | .both => ws2_32.SD_BOTH, | 13570 | .both => ws2_32.SD_BOTH, |
| 13652 | }; | 13571 | }; |
| 13653 | | 13572 | |
| 13654 | var syscall: Syscall = try .start(); | 13573 | var syscall: AlertableSyscall = try .start(); |
| 13655 | while (true) { | 13574 | while (true) { |
| 13656 | const rc = ws2_32.shutdown(handle, wsa_how); | 13575 | const rc = ws2_32.shutdown(handle, wsa_how); |
| 13657 | if (rc != ws2_32.SOCKET_ERROR) { | 13576 | if (rc != ws2_32.SOCKET_ERROR) { |
| ... | @@ -13669,17 +13588,12 @@ fn netShutdownWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, how: net | ... | @@ -13669,17 +13588,12 @@ fn netShutdownWindows(userdata: ?*anyopaque, handle: net.Socket.Handle, how: net |
| 13669 | syscall = try .start(); | 13588 | syscall = try .start(); |
| 13670 | continue; | 13589 | continue; |
| 13671 | }, | 13590 | }, |
| 13672 | else => |e| { | 13591 | .ECONNABORTED => return syscall.fail(error.ConnectionAborted), |
| 13673 | syscall.finish(); | 13592 | .ECONNRESET => return syscall.fail(error.ConnectionResetByPeer), |
| 13674 | switch (e) { | 13593 | .ENETDOWN => return syscall.fail(error.NetworkDown), |
| 13675 | .ECONNABORTED => return error.ConnectionAborted, | 13594 | .ENOTCONN => return syscall.fail(error.SocketUnconnected), |
| 13676 | .ECONNRESET => return error.ConnectionResetByPeer, | 13595 | .EINVAL, .ENOTSOCK => |err| return syscall.wsaErrorBug(err), |
| 13677 | .ENETDOWN => return error.NetworkDown, | 13596 | else => |err| return syscall.unexpectedWsaError(err), |
| 13678 | .ENOTCONN => return error.SocketUnconnected, | | |
| 13679 | .EINVAL, .ENOTSOCK => |err| return wsaErrorBug(err), | | |
| 13680 | else => |err| return windows.unexpectedWSAError(err), | | |
| 13681 | } | | |
| 13682 | }, | | |
| 13683 | } | 13597 | } |
| 13684 | } | 13598 | } |
| 13685 | } | 13599 | } |
| ... | @@ -13866,14 +13780,14 @@ fn netLookupFallible( | ... | @@ -13866,14 +13780,14 @@ fn netLookupFallible( |
| 13866 | continue; | 13780 | continue; |
| 13867 | }, | 13781 | }, |
| 13868 | .TRY_AGAIN => return error.NameServerFailure, | 13782 | .TRY_AGAIN => return error.NameServerFailure, |
| 13869 | .EINVAL => |err| return wsaErrorBug(err), | | |
| 13870 | .NO_RECOVERY => return error.NameServerFailure, | 13783 | .NO_RECOVERY => return error.NameServerFailure, |
| 13871 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, | 13784 | .EAFNOSUPPORT => return error.AddressFamilyUnsupported, |
| 13872 | .NOT_ENOUGH_MEMORY => return error.SystemResources, | 13785 | .NOT_ENOUGH_MEMORY => return error.SystemResources, |
| 13873 | .HOST_NOT_FOUND => return error.UnknownHostName, | 13786 | .HOST_NOT_FOUND => return error.UnknownHostName, |
| 13874 | .TYPE_NOT_FOUND => return error.ProtocolUnsupportedByAddressFamily, | 13787 | .TYPE_NOT_FOUND => return error.ProtocolUnsupportedByAddressFamily, |
| 13875 | .ESOCKTNOSUPPORT => return error.ProtocolUnsupportedBySystem, | 13788 | .ESOCKTNOSUPPORT => return error.ProtocolUnsupportedBySystem, |
| 13876 | else => |err| return windows.unexpectedWSAError(err), | 13789 | .EINVAL => |err| return windows.wsaErrorBug(err), |
| | 13790 | else => |err| return windows.unexpectedWsaError(err), |
| 13877 | } | 13791 | } |
| 13878 | } | 13792 | } |
| 13879 | defer ws2_32.FreeAddrInfoExW(res); | 13793 | defer ws2_32.FreeAddrInfoExW(res); |
| ... | @@ -14363,11 +14277,6 @@ pub fn errnoBug(err: posix.E) Io.UnexpectedError { | ... | @@ -14363,11 +14277,6 @@ pub fn errnoBug(err: posix.E) Io.UnexpectedError { |
| 14363 | return error.Unexpected; | 14277 | return error.Unexpected; |
| 14364 | } | 14278 | } |
| 14365 | | 14279 | |
| 14366 | fn wsaErrorBug(err: ws2_32.WinsockError) Io.UnexpectedError { | | |
| 14367 | if (is_debug) std.debug.panic("programmer bug caused syscall error: {t}", .{err}); | | |
| 14368 | return error.Unexpected; | | |
| 14369 | } | | |
| 14370 | | | |
| 14371 | pub fn posixSocketMode(mode: net.Socket.Mode) u32 { | 14280 | pub fn posixSocketMode(mode: net.Socket.Mode) u32 { |
| 14372 | return switch (mode) { | 14281 | return switch (mode) { |
| 14373 | .stream => posix.SOCK.STREAM, | 14282 | .stream => posix.SOCK.STREAM, |
| ... | @@ -15003,7 +14912,7 @@ fn initializeWsa(t: *Threaded) error{ NetworkDown, Canceled }!void { | ... | @@ -15003,7 +14912,7 @@ fn initializeWsa(t: *Threaded) error{ NetworkDown, Canceled }!void { |
| 15003 | .VERNOTSUPPORTED => error.VersionUnsupported, | 14912 | .VERNOTSUPPORTED => error.VersionUnsupported, |
| 15004 | .EINPROGRESS => error.BlockingOperationInProgress, | 14913 | .EINPROGRESS => error.BlockingOperationInProgress, |
| 15005 | .EPROCLIM => error.ProcessFdQuotaExceeded, | 14914 | .EPROCLIM => error.ProcessFdQuotaExceeded, |
| 15006 | else => |err| windows.unexpectedWSAError(err), | 14915 | else => |err| windows.unexpectedWsaError(err), |
| 15007 | }; | 14916 | }; |
| 15008 | }, | 14917 | }, |
| 15009 | } | 14918 | } |