Skip to content

Commit dd1da29

Browse files
authored
Internals: add Windows error code equivalences (#37)
Windows does not have the same set of error codes as a POSIX system. However, the WinSock subsystem provides a set of error codes which are meant to provide a means for handling similar error scenarios with sockets. This additionally adds an additional error code which allows us to add back a previously ignored error code.
1 parent bdfeb29 commit dd1da29

File tree

2 files changed

+73
-15
lines changed

2 files changed

+73
-15
lines changed

Sources/System/Errno.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,6 @@ public struct Errno: RawRepresentable, Error, Hashable, Codable {
634634
@available(*, unavailable, renamed: "socketTypeNotSupported")
635635
public static var ESOCKTNOSUPPORT: Errno { socketTypeNotSupported }
636636

637-
#if !os(Windows)
638637
/// Not supported.
639638
///
640639
/// The attempted operation isn't supported
@@ -647,7 +646,6 @@ public struct Errno: RawRepresentable, Error, Hashable, Codable {
647646
@_alwaysEmitIntoClient
648647
@available(*, unavailable, renamed: "notSupported")
649648
public static var ENOTSUP: Errno { notSupported }
650-
#endif
651649

652650
/// Protocol family not supported.
653651
///

Sources/System/Internals/Constants.swift

Lines changed: 73 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,31 @@ internal var _ENOPROTOOPT: CInt { ENOPROTOOPT }
166166
internal var _EPROTONOSUPPORT: CInt { EPROTONOSUPPORT }
167167

168168
@_alwaysEmitIntoClient
169-
internal var _ESOCKTNOSUPPORT: CInt { ESOCKTNOSUPPORT }
169+
internal var _ESOCKTNOSUPPORT: CInt {
170+
#if os(Windows)
171+
return WSAESOCKTNOSUPPORT
172+
#else
173+
return ESOCKTNOSUPPORT
174+
#endif
175+
}
170176

171-
#if !os(Windows)
172177
@_alwaysEmitIntoClient
173-
internal var _ENOTSUP: CInt { ENOTSUP }
178+
internal var _ENOTSUP: CInt {
179+
#if os(Windows)
180+
return WSAEOPNOTSUPP
181+
#else
182+
return ENOTSUP
174183
#endif
184+
}
175185

176186
@_alwaysEmitIntoClient
177-
internal var _EPFNOSUPPORT: CInt { EPFNOSUPPORT }
187+
internal var _EPFNOSUPPORT: CInt {
188+
#if os(Windows)
189+
return WSAEPFNOSUPPORT
190+
#else
191+
return EPFNOSUPPORT
192+
#endif
193+
}
178194

179195
@_alwaysEmitIntoClient
180196
internal var _EAFNOSUPPORT: CInt { EAFNOSUPPORT }
@@ -210,10 +226,22 @@ internal var _EISCONN: CInt { EISCONN }
210226
internal var _ENOTCONN: CInt { ENOTCONN }
211227

212228
@_alwaysEmitIntoClient
213-
internal var _ESHUTDOWN: CInt { ESHUTDOWN }
229+
internal var _ESHUTDOWN: CInt {
230+
#if os(Windows)
231+
return WSAESHUTDOWN
232+
#else
233+
return ESHUTDOWN
234+
#endif
235+
}
214236

215237
@_alwaysEmitIntoClient
216-
internal var _ETOOMANYREFS: CInt { ETOOMANYREFS }
238+
internal var _ETOOMANYREFS: CInt {
239+
#if os(Windows)
240+
return WSAETOOMANYREFS
241+
#else
242+
return ETOOMANYREFS
243+
#endif
244+
}
217245

218246
@_alwaysEmitIntoClient
219247
internal var _ETIMEDOUT: CInt { ETIMEDOUT }
@@ -228,7 +256,13 @@ internal var _ELOOP: CInt { ELOOP }
228256
internal var _ENAMETOOLONG: CInt { ENAMETOOLONG }
229257

230258
@_alwaysEmitIntoClient
231-
internal var _EHOSTDOWN: CInt { EHOSTDOWN }
259+
internal var _EHOSTDOWN: CInt {
260+
#if os(Windows)
261+
return WSAEHOSTDOWN
262+
#else
263+
return EHOSTDOWN
264+
#endif
265+
}
232266

233267
@_alwaysEmitIntoClient
234268
internal var _EHOSTUNREACH: CInt { EHOSTUNREACH }
@@ -242,16 +276,40 @@ internal var _EPROCLIM: CInt { EPROCLIM }
242276
#endif
243277

244278
@_alwaysEmitIntoClient
245-
internal var _EUSERS: CInt { EUSERS }
279+
internal var _EUSERS: CInt {
280+
#if os(Windows)
281+
return WSAEUSERS
282+
#else
283+
return EUSERS
284+
#endif
285+
}
246286

247287
@_alwaysEmitIntoClient
248-
internal var _EDQUOT: CInt { EDQUOT }
288+
internal var _EDQUOT: CInt {
289+
#if os(Windows)
290+
return WSAEDQUOT
291+
#else
292+
return EDQUOT
293+
#endif
294+
}
249295

250296
@_alwaysEmitIntoClient
251-
internal var _ESTALE: CInt { ESTALE }
297+
internal var _ESTALE: CInt {
298+
#if os(Windows)
299+
return WSAESTALE
300+
#else
301+
return ESTALE
302+
#endif
303+
}
252304

253305
@_alwaysEmitIntoClient
254-
internal var _EREMOTE: CInt { EREMOTE }
306+
internal var _EREMOTE: CInt {
307+
#if os(Windows)
308+
return WSAEREMOTE
309+
#else
310+
return EREMOTE
311+
#endif
312+
}
255313

256314
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
257315
@_alwaysEmitIntoClient
@@ -392,11 +450,11 @@ internal var _O_WRONLY: CInt { O_WRONLY }
392450
@_alwaysEmitIntoClient
393451
internal var _O_RDWR: CInt { O_RDWR }
394452

453+
#if !os(Windows)
395454
// TODO: API?
396455
@_alwaysEmitIntoClient
397456
internal var _O_ACCMODE: CInt { O_ACCMODE }
398457

399-
#if !os(Windows)
400458
@_alwaysEmitIntoClient
401459
internal var _O_NONBLOCK: CInt { O_NONBLOCK }
402460
#endif
@@ -412,11 +470,11 @@ internal var _O_SHLOCK: CInt { O_SHLOCK }
412470
internal var _O_EXLOCK: CInt { O_EXLOCK }
413471
#endif
414472

473+
#if !os(Windows)
415474
// TODO: API?
416475
@_alwaysEmitIntoClient
417476
internal var _O_ASYNC: CInt { O_ASYNC }
418477

419-
#if !os(Windows)
420478
@_alwaysEmitIntoClient
421479
internal var _O_NOFOLLOW: CInt { O_NOFOLLOW }
422480
#endif
@@ -435,13 +493,15 @@ internal var _O_EXCL: CInt { O_EXCL }
435493
internal var _O_EVTONLY: CInt { O_EVTONLY }
436494
#endif
437495

496+
#if !os(Windows)
438497
// TODO: API?
439498
@_alwaysEmitIntoClient
440499
internal var _O_NOCTTY: CInt { O_NOCTTY }
441500

442501
// TODO: API?
443502
@_alwaysEmitIntoClient
444503
internal var _O_DIRECTORY: CInt { O_DIRECTORY }
504+
#endif
445505

446506
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
447507
@_alwaysEmitIntoClient

0 commit comments

Comments
 (0)