0001
0016
0017 #if os(Linux)
0018 import Glibc
0019 public func fdZero(inout set: fd_set) {
0021 set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
0022 }
0023
0024 public func fdSet(fd: Int32, inout set: fd_set) {
0026 let intOffset = Int(fd / 16)
0027 let bitOffset: Int = Int(fd % 16)
0028 let mask: Int = 1 << bitOffset
0029 switch intOffset {
0030 case 0: set.__fds_bits.0 = set.__fds_bits.0 | mask
0031 case 1: set.__fds_bits.1 = set.__fds_bits.1 | mask
0032 case 2: set.__fds_bits.2 = set.__fds_bits.2 | mask
0033 case 3: set.__fds_bits.3 = set.__fds_bits.3 | mask
0034 case 4: set.__fds_bits.4 = set.__fds_bits.4 | mask
0035 case 5: set.__fds_bits.5 = set.__fds_bits.5 | mask
0036 case 6: set.__fds_bits.6 = set.__fds_bits.6 | mask
0037 case 7: set.__fds_bits.7 = set.__fds_bits.7 | mask
0038 case 8: set.__fds_bits.8 = set.__fds_bits.8 | mask
0039 case 9: set.__fds_bits.9 = set.__fds_bits.9 | mask
0040 case 10: set.__fds_bits.10 = set.__fds_bits.10 | mask
0041 case 11: set.__fds_bits.11 = set.__fds_bits.11 | mask
0042 case 12: set.__fds_bits.12 = set.__fds_bits.12 | mask
0043 case 13: set.__fds_bits.13 = set.__fds_bits.13 | mask
0044 case 14: set.__fds_bits.14 = set.__fds_bits.14 | mask
0045 case 15: set.__fds_bits.15 = set.__fds_bits.15 | mask
0046 default: break
0047 }
0048 }
0049
0050 public func fdClr(fd: Int32, inout set: fd_set) {
0052 let intOffset = Int(fd / 16)
0053 let bitOffset: Int = Int(fd % 16)
0054 let mask: Int = ~(1 << bitOffset)
0055 switch intOffset {
0056 case 0: set.__fds_bits.0 = set.__fds_bits.0 & mask
0057 case 1: set.__fds_bits.1 = set.__fds_bits.1 & mask
0058 case 2: set.__fds_bits.2 = set.__fds_bits.2 & mask
0059 case 3: set.__fds_bits.3 = set.__fds_bits.3 & mask
0060 case 4: set.__fds_bits.4 = set.__fds_bits.4 & mask
0061 case 5: set.__fds_bits.5 = set.__fds_bits.5 & mask
0062 case 6: set.__fds_bits.6 = set.__fds_bits.6 & mask
0063 case 7: set.__fds_bits.7 = set.__fds_bits.7 & mask
0064 case 8: set.__fds_bits.8 = set.__fds_bits.8 & mask
0065 case 9: set.__fds_bits.9 = set.__fds_bits.9 & mask
0066 case 10: set.__fds_bits.10 = set.__fds_bits.10 & mask
0067 case 11: set.__fds_bits.11 = set.__fds_bits.11 & mask
0068 case 12: set.__fds_bits.12 = set.__fds_bits.12 & mask
0069 case 13: set.__fds_bits.13 = set.__fds_bits.13 & mask
0070 case 14: set.__fds_bits.14 = set.__fds_bits.14 & mask
0071 case 15: set.__fds_bits.15 = set.__fds_bits.15 & mask
0072 default: break
0073 }
0074 }
0075
0076 public func fdIsSet(fd: Int32, inout set: fd_set) -> Bool {
0078 let intOffset = Int(fd / 16)
0079 let bitOffset = Int(fd % 16)
0080 let mask: Int = 1 << bitOffset
0081 switch intOffset {
0082 case 0: return set.__fds_bits.0 & mask != 0
0083 case 1: return set.__fds_bits.1 & mask != 0
0084 case 2: return set.__fds_bits.2 & mask != 0
0085 case 3: return set.__fds_bits.3 & mask != 0
0086 case 4: return set.__fds_bits.4 & mask != 0
0087 case 5: return set.__fds_bits.5 & mask != 0
0088 case 6: return set.__fds_bits.6 & mask != 0
0089 case 7: return set.__fds_bits.7 & mask != 0
0090 case 8: return set.__fds_bits.8 & mask != 0
0091 case 9: return set.__fds_bits.9 & mask != 0
0092 case 10: return set.__fds_bits.10 & mask != 0
0093 case 11: return set.__fds_bits.11 & mask != 0
0094 case 12: return set.__fds_bits.12 & mask != 0
0095 case 13: return set.__fds_bits.13 & mask != 0
0096 case 14: return set.__fds_bits.14 & mask != 0
0097 case 15: return set.__fds_bits.15 & mask != 0
0098 default: return false
0099 }
0100 }
0101 #else
0102 import Darwin
0103 public func fdZero(inout set: fd_set) {
0105 set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
0106 }
0107
0108 public func fdSet(fd: Int32, inout set: fd_set) {
0110 let intOffset = Int(fd / 32)
0111 let bitOffset = fd % 32
0112 let mask = 1 << bitOffset
0113 switch intOffset {
0114 case 0: set.fds_bits.0 = set.fds_bits.0 | mask
0115 case 1: set.fds_bits.1 = set.fds_bits.1 | mask
0116 case 2: set.fds_bits.2 = set.fds_bits.2 | mask
0117 case 3: set.fds_bits.3 = set.fds_bits.3 | mask
0118 case 4: set.fds_bits.4 = set.fds_bits.4 | mask
0119 case 5: set.fds_bits.5 = set.fds_bits.5 | mask
0120 case 6: set.fds_bits.6 = set.fds_bits.6 | mask
0121 case 7: set.fds_bits.7 = set.fds_bits.7 | mask
0122 case 8: set.fds_bits.8 = set.fds_bits.8 | mask
0123 case 9: set.fds_bits.9 = set.fds_bits.9 | mask
0124 case 10: set.fds_bits.10 = set.fds_bits.10 | mask
0125 case 11: set.fds_bits.11 = set.fds_bits.11 | mask
0126 case 12: set.fds_bits.12 = set.fds_bits.12 | mask
0127 case 13: set.fds_bits.13 = set.fds_bits.13 | mask
0128 case 14: set.fds_bits.14 = set.fds_bits.14 | mask
0129 case 15: set.fds_bits.15 = set.fds_bits.15 | mask
0130 case 16: set.fds_bits.16 = set.fds_bits.16 | mask
0131 case 17: set.fds_bits.17 = set.fds_bits.17 | mask
0132 case 18: set.fds_bits.18 = set.fds_bits.18 | mask
0133 case 19: set.fds_bits.19 = set.fds_bits.19 | mask
0134 case 20: set.fds_bits.20 = set.fds_bits.20 | mask
0135 case 21: set.fds_bits.21 = set.fds_bits.21 | mask
0136 case 22: set.fds_bits.22 = set.fds_bits.22 | mask
0137 case 23: set.fds_bits.23 = set.fds_bits.23 | mask
0138 case 24: set.fds_bits.24 = set.fds_bits.24 | mask
0139 case 25: set.fds_bits.25 = set.fds_bits.25 | mask
0140 case 26: set.fds_bits.26 = set.fds_bits.26 | mask
0141 case 27: set.fds_bits.27 = set.fds_bits.27 | mask
0142 case 28: set.fds_bits.28 = set.fds_bits.28 | mask
0143 case 29: set.fds_bits.29 = set.fds_bits.29 | mask
0144 case 30: set.fds_bits.30 = set.fds_bits.30 | mask
0145 case 31: set.fds_bits.31 = set.fds_bits.31 | mask
0146 default: break
0147 }
0148 }
0149
0150 public func fdClr(fd: Int32, inout set: fd_set) {
0152 let intOffset = Int(fd / 32)
0153 let bitOffset = fd % 32
0154 let mask = ~(1 << bitOffset)
0155 switch intOffset {
0156 case 0: set.fds_bits.0 = set.fds_bits.0 & mask
0157 case 1: set.fds_bits.1 = set.fds_bits.1 & mask
0158 case 2: set.fds_bits.2 = set.fds_bits.2 & mask
0159 case 3: set.fds_bits.3 = set.fds_bits.3 & mask
0160 case 4: set.fds_bits.4 = set.fds_bits.4 & mask
0161 case 5: set.fds_bits.5 = set.fds_bits.5 & mask
0162 case 6: set.fds_bits.6 = set.fds_bits.6 & mask
0163 case 7: set.fds_bits.7 = set.fds_bits.7 & mask
0164 case 8: set.fds_bits.8 = set.fds_bits.8 & mask
0165 case 9: set.fds_bits.9 = set.fds_bits.9 & mask
0166 case 10: set.fds_bits.10 = set.fds_bits.10 & mask
0167 case 11: set.fds_bits.11 = set.fds_bits.11 & mask
0168 case 12: set.fds_bits.12 = set.fds_bits.12 & mask
0169 case 13: set.fds_bits.13 = set.fds_bits.13 & mask
0170 case 14: set.fds_bits.14 = set.fds_bits.14 & mask
0171 case 15: set.fds_bits.15 = set.fds_bits.15 & mask
0172 case 16: set.fds_bits.16 = set.fds_bits.16 & mask
0173 case 17: set.fds_bits.17 = set.fds_bits.17 & mask
0174 case 18: set.fds_bits.18 = set.fds_bits.18 & mask
0175 case 19: set.fds_bits.19 = set.fds_bits.19 & mask
0176 case 20: set.fds_bits.20 = set.fds_bits.20 & mask
0177 case 21: set.fds_bits.21 = set.fds_bits.21 & mask
0178 case 22: set.fds_bits.22 = set.fds_bits.22 & mask
0179 case 23: set.fds_bits.23 = set.fds_bits.23 & mask
0180 case 24: set.fds_bits.24 = set.fds_bits.24 & mask
0181 case 25: set.fds_bits.25 = set.fds_bits.25 & mask
0182 case 26: set.fds_bits.26 = set.fds_bits.26 & mask
0183 case 27: set.fds_bits.27 = set.fds_bits.27 & mask
0184 case 28: set.fds_bits.28 = set.fds_bits.28 & mask
0185 case 29: set.fds_bits.29 = set.fds_bits.29 & mask
0186 case 30: set.fds_bits.30 = set.fds_bits.30 & mask
0187 case 31: set.fds_bits.31 = set.fds_bits.31 & mask
0188 default: break
0189 }
0190 }
0191
0192 public func fdIsSet(fd: Int32, inout set: fd_set) -> Bool {
0194 let intOffset = Int(fd / 32)
0195 let bitOffset = fd % 32
0196 let mask = 1 << bitOffset
0197 switch intOffset {
0198 case 0: return set.fds_bits.0 & mask != 0
0199 case 1: return set.fds_bits.1 & mask != 0
0200 case 2: return set.fds_bits.2 & mask != 0
0201 case 3: return set.fds_bits.3 & mask != 0
0202 case 4: return set.fds_bits.4 & mask != 0
0203 case 5: return set.fds_bits.5 & mask != 0
0204 case 6: return set.fds_bits.6 & mask != 0
0205 case 7: return set.fds_bits.7 & mask != 0
0206 case 8: return set.fds_bits.8 & mask != 0
0207 case 9: return set.fds_bits.9 & mask != 0
0208 case 10: return set.fds_bits.10 & mask != 0
0209 case 11: return set.fds_bits.11 & mask != 0
0210 case 12: return set.fds_bits.12 & mask != 0
0211 case 13: return set.fds_bits.13 & mask != 0
0212 case 14: return set.fds_bits.14 & mask != 0
0213 case 15: return set.fds_bits.15 & mask != 0
0214 case 16: return set.fds_bits.16 & mask != 0
0215 case 17: return set.fds_bits.17 & mask != 0
0216 case 18: return set.fds_bits.18 & mask != 0
0217 case 19: return set.fds_bits.19 & mask != 0
0218 case 20: return set.fds_bits.20 & mask != 0
0219 case 21: return set.fds_bits.21 & mask != 0
0220 case 22: return set.fds_bits.22 & mask != 0
0221 case 23: return set.fds_bits.23 & mask != 0
0222 case 24: return set.fds_bits.24 & mask != 0
0223 case 25: return set.fds_bits.25 & mask != 0
0224 case 26: return set.fds_bits.26 & mask != 0
0225 case 27: return set.fds_bits.27 & mask != 0
0226 case 28: return set.fds_bits.28 & mask != 0
0227 case 29: return set.fds_bits.29 & mask != 0
0228 case 30: return set.fds_bits.30 & mask != 0
0229 case 31: return set.fds_bits.31 & mask != 0
0230 default: return false
0231 }
0232 }
0233 #endif
0234