Fix the missing socket options for 32-bit. (#1918)

Motivation:

When pulling out the NIOBSDSocket later in #1907 we dropped some of the
socket option fixes for 32 bit platforms, which broke them.

Modifications:

Restore the socket options.

Result:

32-bit build should be working again.
This commit is contained in:
Cory Benfield 2021-07-26 17:24:18 +01:00 committed by GitHub
parent 4c0c5e555c
commit 8b06e8f996
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 9 deletions

View File

@ -17,7 +17,7 @@ import PackageDescription
var targets: [PackageDescription.Target] = [ var targets: [PackageDescription.Target] = [
.target(name: "NIOCore", .target(name: "NIOCore",
dependencies: ["NIOConcurrencyHelpers"]), dependencies: ["NIOConcurrencyHelpers", "CNIOLinux"]),
.target(name: "NIO", .target(name: "NIO",
dependencies: ["CNIOLinux", dependencies: ["CNIOLinux",
"CNIODarwin", "CNIODarwin",

View File

@ -48,8 +48,6 @@ extension ipv6_mreq { // http://lkml.iu.edu/hypermail/linux/kernel/0106.1/0080.h
} }
} }
#if arch(arm) #if arch(arm)
let SO_RCVTIMEO = SO_RCVTIMEO_OLD
let SO_TIMESTAMP = SO_TIMESTAMP_OLD
let S_IFSOCK = UInt32(SwiftGlibc.S_IFSOCK) let S_IFSOCK = UInt32(SwiftGlibc.S_IFSOCK)
let S_IFMT = UInt32(SwiftGlibc.S_IFMT) let S_IFMT = UInt32(SwiftGlibc.S_IFMT)
let S_IFREG = UInt32(SwiftGlibc.S_IFREG) let S_IFREG = UInt32(SwiftGlibc.S_IFREG)
@ -59,12 +57,6 @@ let S_IFBLK = UInt32(SwiftGlibc.S_IFBLK)
#endif #endif
#endif #endif
// Work around SO_TIMESTAMP/SO_RCVTIMEO being awkwardly defined in glibc.
#if os(Linux)
let SO_TIMESTAMP = CNIOLinux_SO_TIMESTAMP
let SO_RCVTIMEO = CNIOLinux_SO_RCVTIMEO
#endif
// Declare aliases to share more code and not need to repeat #if #else blocks // Declare aliases to share more code and not need to repeat #if #else blocks
#if !os(Windows) #if !os(Windows)
private let sysClose = close private let sysClose = close

View File

@ -56,6 +56,7 @@ import func WinSDK.inet_ntop
import func WinSDK.inet_pton import func WinSDK.inet_pton
#elseif os(Linux) || os(Android) #elseif os(Linux) || os(Android)
import Glibc import Glibc
import CNIOLinux
private let sysInet_ntop: @convention(c) (CInt, UnsafeRawPointer?, UnsafeMutablePointer<CChar>?, socklen_t) -> UnsafePointer<CChar>? = inet_ntop private let sysInet_ntop: @convention(c) (CInt, UnsafeRawPointer?, UnsafeMutablePointer<CChar>?, socklen_t) -> UnsafePointer<CChar>? = inet_ntop
private let sysInet_pton: @convention(c) (CInt, UnsafePointer<CChar>?, UnsafeMutableRawPointer?) -> CInt = inet_pton private let sysInet_pton: @convention(c) (CInt, UnsafePointer<CChar>?, UnsafeMutableRawPointer?) -> CInt = inet_pton
@ -66,6 +67,15 @@ private let sysInet_ntop: @convention(c) (CInt, UnsafeRawPointer?, UnsafeMutable
private let sysInet_pton: @convention(c) (CInt, UnsafePointer<CChar>?, UnsafeMutableRawPointer?) -> CInt = inet_pton private let sysInet_pton: @convention(c) (CInt, UnsafePointer<CChar>?, UnsafeMutableRawPointer?) -> CInt = inet_pton
#endif #endif
// Work around SO_TIMESTAMP/SO_RCVTIMEO being awkwardly defined in glibc.
#if os(Android) && arch(arm)
let SO_RCVTIMEO = SO_RCVTIMEO_OLD
let SO_TIMESTAMP = SO_TIMESTAMP_OLD
#elseif os(Linux)
let SO_TIMESTAMP = CNIOLinux_SO_TIMESTAMP
let SO_RCVTIMEO = CNIOLinux_SO_RCVTIMEO
#endif
public enum NIOBSDSocket { public enum NIOBSDSocket {
#if os(Windows) #if os(Windows)
public typealias Handle = SOCKET public typealias Handle = SOCKET