| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/network/socket/qlocalserver_unix.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||||||||
| 2 | - | |||||||||||||||||||||||||
| 3 | - | |||||||||||||||||||||||||
| 4 | - | |||||||||||||||||||||||||
| 5 | - | |||||||||||||||||||||||||
| 6 | - | |||||||||||||||||||||||||
| 7 | - | |||||||||||||||||||||||||
| 8 | - | |||||||||||||||||||||||||
| 9 | - | |||||||||||||||||||||||||
| 10 | - | |||||||||||||||||||||||||
| 11 | - | |||||||||||||||||||||||||
| 12 | - | |||||||||||||||||||||||||
| 13 | void QLocalServerPrivate::init() | - | ||||||||||||||||||||||||
| 14 | { | - | ||||||||||||||||||||||||
| 15 | } | - | ||||||||||||||||||||||||
| 16 | - | |||||||||||||||||||||||||
| 17 | bool QLocalServerPrivate::removeServer(const QString &name) | - | ||||||||||||||||||||||||
| 18 | { | - | ||||||||||||||||||||||||
| 19 | QString fileName; | - | ||||||||||||||||||||||||
| 20 | if (name.startsWith(QLatin1Char('/'))) { | - | ||||||||||||||||||||||||
| 21 | fileName = name; | - | ||||||||||||||||||||||||
| 22 | } else { | - | ||||||||||||||||||||||||
| 23 | fileName = QDir::cleanPath(QDir::tempPath()); | - | ||||||||||||||||||||||||
| 24 | fileName += QLatin1Char('/') + name; | - | ||||||||||||||||||||||||
| 25 | } | - | ||||||||||||||||||||||||
| 26 | if (QFile::exists(fileName)) | - | ||||||||||||||||||||||||
| 27 | return QFile::remove(fileName); | - | ||||||||||||||||||||||||
| 28 | else | - | ||||||||||||||||||||||||
| 29 | return true; | - | ||||||||||||||||||||||||
| 30 | } | - | ||||||||||||||||||||||||
| 31 | - | |||||||||||||||||||||||||
| 32 | bool QLocalServerPrivate::listen(const QString &requestedServerName) | - | ||||||||||||||||||||||||
| 33 | { | - | ||||||||||||||||||||||||
| 34 | QLocalServer * const q = q_func(); | - | ||||||||||||||||||||||||
| 35 | - | |||||||||||||||||||||||||
| 36 | - | |||||||||||||||||||||||||
| 37 | if (requestedServerName.startsWith(QLatin1Char('/'))) { | - | ||||||||||||||||||||||||
| 38 | fullServerName = requestedServerName; | - | ||||||||||||||||||||||||
| 39 | } else { | - | ||||||||||||||||||||||||
| 40 | fullServerName = QDir::cleanPath(QDir::tempPath()); | - | ||||||||||||||||||||||||
| 41 | fullServerName += QLatin1Char('/') + requestedServerName; | - | ||||||||||||||||||||||||
| 42 | } | - | ||||||||||||||||||||||||
| 43 | serverName = requestedServerName; | - | ||||||||||||||||||||||||
| 44 | - | |||||||||||||||||||||||||
| 45 | QByteArray encodedTempPath; | - | ||||||||||||||||||||||||
| 46 | const QByteArray encodedFullServerName = QFile::encodeName(fullServerName); | - | ||||||||||||||||||||||||
| 47 | QScopedPointer<QTemporaryDir> tempDir; | - | ||||||||||||||||||||||||
| 48 | - | |||||||||||||||||||||||||
| 49 | - | |||||||||||||||||||||||||
| 50 | if (socketOptions & QLocalServer::WorldAccessOption) { | - | ||||||||||||||||||||||||
| 51 | QFileInfo serverNameFileInfo(fullServerName); | - | ||||||||||||||||||||||||
| 52 | tempDir.reset(new QTemporaryDir(serverNameFileInfo.absolutePath() + QLatin1Char('/'))); | - | ||||||||||||||||||||||||
| 53 | if (!tempDir->isValid()) { | - | ||||||||||||||||||||||||
| 54 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 55 | return false; | - | ||||||||||||||||||||||||
| 56 | } | - | ||||||||||||||||||||||||
| 57 | encodedTempPath = QFile::encodeName(tempDir->path() + QLatin1String("/s")); | - | ||||||||||||||||||||||||
| 58 | } | - | ||||||||||||||||||||||||
| 59 | - | |||||||||||||||||||||||||
| 60 | - | |||||||||||||||||||||||||
| 61 | listenSocket = qt_safe_socket(1, SOCK_STREAM, 0); | - | ||||||||||||||||||||||||
| 62 | if (-1 == listenSocket) { | - | ||||||||||||||||||||||||
| 63 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 64 | closeServer(); | - | ||||||||||||||||||||||||
| 65 | return false; | - | ||||||||||||||||||||||||
| 66 | } | - | ||||||||||||||||||||||||
| 67 | - | |||||||||||||||||||||||||
| 68 | - | |||||||||||||||||||||||||
| 69 | struct ::sockaddr_un addr; | - | ||||||||||||||||||||||||
| 70 | addr.sun_family = 1; | - | ||||||||||||||||||||||||
| 71 | if (sizeof(addr.sun_path) < (uint)encodedFullServerName.size() + 1) { | - | ||||||||||||||||||||||||
| 72 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 73 | closeServer(); | - | ||||||||||||||||||||||||
| 74 | return false; | - | ||||||||||||||||||||||||
| 75 | } | - | ||||||||||||||||||||||||
| 76 | - | |||||||||||||||||||||||||
| 77 | if (socketOptions & QLocalServer::WorldAccessOption) { | - | ||||||||||||||||||||||||
| 78 | if (sizeof(addr.sun_path) < (uint)encodedTempPath.size() + 1) { | - | ||||||||||||||||||||||||
| 79 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 80 | closeServer(); | - | ||||||||||||||||||||||||
| 81 | return false; | - | ||||||||||||||||||||||||
| 82 | } | - | ||||||||||||||||||||||||
| 83 | ::memcpy(addr.sun_path, encodedTempPath.constData(), | - | ||||||||||||||||||||||||
| 84 | encodedTempPath.size() + 1); | - | ||||||||||||||||||||||||
| 85 | } else { | - | ||||||||||||||||||||||||
| 86 | ::memcpy(addr.sun_path, encodedFullServerName.constData(), | - | ||||||||||||||||||||||||
| 87 | encodedFullServerName.size() + 1); | - | ||||||||||||||||||||||||
| 88 | } | - | ||||||||||||||||||||||||
| 89 | - | |||||||||||||||||||||||||
| 90 | - | |||||||||||||||||||||||||
| 91 | if(-1 == ::bind(listenSocket, (sockaddr *)&addr, sizeof(sockaddr_un))) { | - | ||||||||||||||||||||||||
| 92 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 93 | - | |||||||||||||||||||||||||
| 94 | if((*__errno_location ()) == 98) | - | ||||||||||||||||||||||||
| 95 | qt_safe_close(listenSocket); | - | ||||||||||||||||||||||||
| 96 | - | |||||||||||||||||||||||||
| 97 | else | - | ||||||||||||||||||||||||
| 98 | closeServer(); | - | ||||||||||||||||||||||||
| 99 | listenSocket = -1; | - | ||||||||||||||||||||||||
| 100 | return false; | - | ||||||||||||||||||||||||
| 101 | } | - | ||||||||||||||||||||||||
| 102 | - | |||||||||||||||||||||||||
| 103 | - | |||||||||||||||||||||||||
| 104 | if (-1 == qt_safe_listen(listenSocket, 50)) { | - | ||||||||||||||||||||||||
| 105 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 106 | closeServer(); | - | ||||||||||||||||||||||||
| 107 | listenSocket = -1; | - | ||||||||||||||||||||||||
| 108 | if (error != QAbstractSocket::AddressInUseError) | - | ||||||||||||||||||||||||
| 109 | QFile::remove(fullServerName); | - | ||||||||||||||||||||||||
| 110 | return false; | - | ||||||||||||||||||||||||
| 111 | } | - | ||||||||||||||||||||||||
| 112 | - | |||||||||||||||||||||||||
| 113 | if (socketOptions & QLocalServer::WorldAccessOption) { | - | ||||||||||||||||||||||||
| 114 | mode_t mode = 000; | - | ||||||||||||||||||||||||
| 115 | - | |||||||||||||||||||||||||
| 116 | if (socketOptions & QLocalServer::UserAccessOption) | - | ||||||||||||||||||||||||
| 117 | mode |= (0400|0200|0100); | - | ||||||||||||||||||||||||
| 118 | - | |||||||||||||||||||||||||
| 119 | if (socketOptions & QLocalServer::GroupAccessOption) | - | ||||||||||||||||||||||||
| 120 | mode |= ((0400|0200|0100) >> 3); | - | ||||||||||||||||||||||||
| 121 | - | |||||||||||||||||||||||||
| 122 | if (socketOptions & QLocalServer::OtherAccessOption) | - | ||||||||||||||||||||||||
| 123 | mode |= (((0400|0200|0100) >> 3) >> 3); | - | ||||||||||||||||||||||||
| 124 | - | |||||||||||||||||||||||||
| 125 | if (::chmod(encodedTempPath.constData(), mode) == -1) { | - | ||||||||||||||||||||||||
| 126 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 127 | closeServer(); | - | ||||||||||||||||||||||||
| 128 | return false; | - | ||||||||||||||||||||||||
| 129 | } | - | ||||||||||||||||||||||||
| 130 | - | |||||||||||||||||||||||||
| 131 | if (::rename(encodedTempPath.constData(), encodedFullServerName.constData()) == -1) { | - | ||||||||||||||||||||||||
| 132 | setError(QLatin1String("QLocalServer::listen")); | - | ||||||||||||||||||||||||
| 133 | closeServer(); | - | ||||||||||||||||||||||||
| 134 | return false; | - | ||||||||||||||||||||||||
| 135 | } | - | ||||||||||||||||||||||||
| 136 | } | - | ||||||||||||||||||||||||
| 137 | - | |||||||||||||||||||||||||
| 138 | ((!(!socketNotifier)) ? qt_assert("!socketNotifier",__FILE__,181187) : qt_noop()); | - | ||||||||||||||||||||||||
| 139 | socketNotifier = new QSocketNotifier(listenSocket, | - | ||||||||||||||||||||||||
| 140 | QSocketNotifier::Read, q); | - | ||||||||||||||||||||||||
| 141 | q->connect(socketNotifier, qFlagLocation("2""activated(int)" "\0" __FILE__ ":" "184""190"), | - | ||||||||||||||||||||||||
| 142 | q, qFlagLocation("1""_q_onNewConnection()" "\0" __FILE__ ":" "185""191")); | - | ||||||||||||||||||||||||
| 143 | socketNotifier->setEnabled(maxPendingConnections > 0); | - | ||||||||||||||||||||||||
| 144 | return true; | - | ||||||||||||||||||||||||
| 145 | } | - | ||||||||||||||||||||||||
| 146 | - | |||||||||||||||||||||||||
| 147 | bool QLocalServerPrivate::listen(qintptr socketDescriptor) | - | ||||||||||||||||||||||||
| 148 | { | - | ||||||||||||||||||||||||
| 149 | QLocalServer * const q = q_func(); | - | ||||||||||||||||||||||||
| 150 | - | |||||||||||||||||||||||||
| 151 | - | |||||||||||||||||||||||||
| 152 | listenSocket = socketDescriptor; | - | ||||||||||||||||||||||||
| 153 | - | |||||||||||||||||||||||||
| 154 | ::fcntl(listenSocket, 2, 1); | - | ||||||||||||||||||||||||
| 155 | ::fcntl(listenSocket, 4, ::fcntl(listenSocket, 3) | 04000); | - | ||||||||||||||||||||||||
| 156 | - | |||||||||||||||||||||||||
| 157 | - | |||||||||||||||||||||||||
| 158 | struct ::sockaddr_un addr; | - | ||||||||||||||||||||||||
| 159 | socklen_t len = sizeof(addr); | - | ||||||||||||||||||||||||
| 160 | memset(&addr, 0, sizeof(addr)); | - | ||||||||||||||||||||||||
| 161 | if (0 == ::getsockname(listenSocket, (sockaddr *)&addr, &len)) { | - | ||||||||||||||||||||||||
| 162 | - | |||||||||||||||||||||||||
| 163 | if (addr.sun_family == 1 && addr.sun_path[0] == 0) { | - | ||||||||||||||||||||||||
| 164 | addr.sun_path[0] = '@'; | - | ||||||||||||||||||||||||
| 165 | } | - | ||||||||||||||||||||||||
| 166 | QString name = QString::fromLatin1(addr.sun_path); | - | ||||||||||||||||||||||||
| 167 | if (!name.isEmpty()) { | - | ||||||||||||||||||||||||
| 168 | fullServerName = name; | - | ||||||||||||||||||||||||
| 169 | serverName = fullServerName.mid(fullServerName.lastIndexOf(QLatin1Char('/')) + 1); | - | ||||||||||||||||||||||||
| 170 | if (serverName.isEmpty()) { | - | ||||||||||||||||||||||||
| 171 | serverName = fullServerName; | - | ||||||||||||||||||||||||
| 172 | } | - | ||||||||||||||||||||||||
| 173 | } | - | ||||||||||||||||||||||||
| 174 | } | - | ||||||||||||||||||||||||
| 175 | - | |||||||||||||||||||||||||
| 176 | - | |||||||||||||||||||||||||
| 177 | - | |||||||||||||||||||||||||
| 178 | - | |||||||||||||||||||||||||
| 179 | - | |||||||||||||||||||||||||
| 180 | ((!(!socketNotifier)) ? qt_assert("!socketNotifier",__FILE__,223229) : qt_noop()); | - | ||||||||||||||||||||||||
| 181 | socketNotifier = new QSocketNotifier(listenSocket, | - | ||||||||||||||||||||||||
| 182 | QSocketNotifier::Read, q); | - | ||||||||||||||||||||||||
| 183 | q->connect(socketNotifier, qFlagLocation("2""activated(int)" "\0" __FILE__ ":" "226""232"), | - | ||||||||||||||||||||||||
| 184 | q, qFlagLocation("1""_q_onNewConnection()" "\0" __FILE__ ":" "227""233")); | - | ||||||||||||||||||||||||
| 185 | socketNotifier->setEnabled(maxPendingConnections > 0); | - | ||||||||||||||||||||||||
| 186 | return true; | - | ||||||||||||||||||||||||
| 187 | } | - | ||||||||||||||||||||||||
| 188 | - | |||||||||||||||||||||||||
| 189 | - | |||||||||||||||||||||||||
| 190 | - | |||||||||||||||||||||||||
| 191 | - | |||||||||||||||||||||||||
| 192 | - | |||||||||||||||||||||||||
| 193 | - | |||||||||||||||||||||||||
| 194 | void QLocalServerPrivate::closeServer() | - | ||||||||||||||||||||||||
| 195 | { | - | ||||||||||||||||||||||||
| 196 | if (socketNotifier) { | - | ||||||||||||||||||||||||
| 197 | socketNotifier->setEnabled(false); | - | ||||||||||||||||||||||||
| 198 | socketNotifier->deleteLater(); | - | ||||||||||||||||||||||||
| 199 | socketNotifier = 0; | - | ||||||||||||||||||||||||
| 200 | } | - | ||||||||||||||||||||||||
| 201 | - | |||||||||||||||||||||||||
| 202 | if (-1 != listenSocket) | - | ||||||||||||||||||||||||
| 203 | qt_safe_close(listenSocket); | - | ||||||||||||||||||||||||
| 204 | listenSocket = -1; | - | ||||||||||||||||||||||||
| 205 | - | |||||||||||||||||||||||||
| 206 | if (!fullServerName.isEmpty()) | - | ||||||||||||||||||||||||
| 207 | QFile::remove(fullServerName); | - | ||||||||||||||||||||||||
| 208 | } | - | ||||||||||||||||||||||||
| 209 | - | |||||||||||||||||||||||||
| 210 | - | |||||||||||||||||||||||||
| 211 | - | |||||||||||||||||||||||||
| 212 | - | |||||||||||||||||||||||||
| 213 | - | |||||||||||||||||||||||||
| 214 | - | |||||||||||||||||||||||||
| 215 | - | |||||||||||||||||||||||||
| 216 | void QLocalServerPrivate::_q_onNewConnection() | - | ||||||||||||||||||||||||
| 217 | { | - | ||||||||||||||||||||||||
| 218 | QLocalServer * const q = q_func(); | - | ||||||||||||||||||||||||
| 219 | if (-1 == listenSocket) | - | ||||||||||||||||||||||||
| 220 | return; | - | ||||||||||||||||||||||||
| 221 | - | |||||||||||||||||||||||||
| 222 | ::sockaddr_un addr; | - | ||||||||||||||||||||||||
| 223 | socklen_t length = sizeof(sockaddr_un); | - | ||||||||||||||||||||||||
| 224 | int connectedSocket = qt_safe_accept(listenSocket, (sockaddr *)&addr, &length); | - | ||||||||||||||||||||||||
| 225 | if(-1 == connectedSocket) { | - | ||||||||||||||||||||||||
| 226 | setError(QLatin1String("QLocalSocket::activated")); | - | ||||||||||||||||||||||||
| 227 | closeServer(); | - | ||||||||||||||||||||||||
| 228 | } else { | - | ||||||||||||||||||||||||
| 229 | socketNotifier->setEnabled(pendingConnections.size() | - | ||||||||||||||||||||||||
| 230 | <= maxPendingConnections); | - | ||||||||||||||||||||||||
| 231 | q->incomingConnection(connectedSocket); | - | ||||||||||||||||||||||||
| 232 | } | - | ||||||||||||||||||||||||
| 233 | } | - | ||||||||||||||||||||||||
| 234 | - | |||||||||||||||||||||||||
| 235 | void QLocalServerPrivate::waitForNewConnection(int msec, bool *timedOut) | - | ||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||
| fd_set readfds; | ||||||||||||||||||||||||||
| do{ | ||||||||||||||||||||||||||
| 237 | int __d0, __d1; __asm__ __volatile__ ("cld; rep; " "stosq" : "=c" (__d0), "pollfd pfd = D" (__d1) : "a" (0), "0" (sizeofqt_make_pollfd(fd_set) / sizeoflistenSocket, 0x001); | - | ||||||||||||||||||||||||
| 238 | - | |||||||||||||||||||||||||
| 239 | switch (__fd_mask)), "1"qt_poll_msecs(&((&readfds)->fds_bits)[&pfd, 1, msec)) { | - | ||||||||||||||||||||||||
| 240 | case executed 2 times by 1 test: case 0:Executed by:
executed 2 times by 1 test: 0]):case 0:Executed by:
executed 2 times by 1 test: case 0:Executed by:
| 2 | ||||||||||||||||||||||||
| 241 | "memory"); } whileif (0); | 0-2 | ||||||||||||||||||||||||
((void) (((&readfds)->fds_bits)[((listenSockettimedOut
| ||||||||||||||||||||||||||
| 242 | / (8* executed 2 times by 1 test: (int) sizeof (__fd_mask)))] |timedOut = ((__fd_mask) 1 << ((listenSocket) % (8 * (int) sizeof (__fd_mask))))));*timedOut = true;Executed by:
executed 2 times by 1 test: *timedOut = true;Executed by:
| 2 | ||||||||||||||||||||||||
| struct timespec timeout executed 2 times by 1 test: *timedOut = true;Executed by:
executed 2 times by 1 test: true;*timedOut = true;Executed by:
executed 2 times by 1 test: *timedOut = true;Executed by:
| ||||||||||||||||||||||||||
| 243 | - | |||||||||||||||||||||||||
| 244 | timeout.tv_sec = msec / 1000return executed 2 times by 1 test: ;return;Executed by:
executed 2 times by 1 test: return;Executed by:
| 2 | ||||||||||||||||||||||||
| 245 | timeoutbreak; dead code: break; | - | ||||||||||||||||||||||||
| 246 | default executed 77 times by 3 tests: :default:Executed by:
executed 77 times by 3 tests: default:Executed by:
| 77 | ||||||||||||||||||||||||
| 247 | if ((
| 0-77 | ||||||||||||||||||||||||
| 248 | _q_onNewConnection(); | - | ||||||||||||||||||||||||
| 249 | return executed 77 times by 3 tests: return;Executed by:
executed 77 times by 3 tests: return;Executed by:
executed 77 times by 3 tests: ;return;Executed by:
executed 77 times by 3 tests: return;Executed by:
| 77 | ||||||||||||||||||||||||
| 250 | int result} | - | ||||||||||||||||||||||||
| 251 | - | |||||||||||||||||||||||||
| 252 | (*__errno_location ()) = -19; | - | ||||||||||||||||||||||||
| 253 | - | |||||||||||||||||||||||||
| 254 | result = qt_safe_select(listenSocket + 1, &readfds, 0, 0, (msec ==case never executed: case -1:never executed: -1) ? 0:case -1:never executed: case -1:code before this statement never executed: case -1: | 0 | ||||||||||||||||||||||||
| 255 | &timeout); | - | ||||||||||||||||||||||||
| if (-1 == result) {setError(QLatin1String("QLocalServer::waitForNewConnection")); | ||||||||||||||||||||||||||
| 256 | closeServer(); | - | ||||||||||||||||||||||||
| 257 | break; never executed: break; | 0 | ||||||||||||||||||||||||
| 258 | }if (result > 0) | - | ||||||||||||||||||||||||
| _q_onNewConnection(); | ||||||||||||||||||||||||||
| if (timedOut) | ||||||||||||||||||||||||||
| *timedOut = (result == 0); | ||||||||||||||||||||||||||
| 259 | } | - | ||||||||||||||||||||||||
| 260 | - | |||||||||||||||||||||||||
| 261 | void QLocalServerPrivate::setError(const QString &function) | - | ||||||||||||||||||||||||
| 262 | { | - | ||||||||||||||||||||||||
| 263 | if (11 == (*__errno_location ())) | - | ||||||||||||||||||||||||
| 264 | return; | - | ||||||||||||||||||||||||
| 265 | - | |||||||||||||||||||||||||
| 266 | switch ((*__errno_location ())) { | - | ||||||||||||||||||||||||
| 267 | case 13: | - | ||||||||||||||||||||||||
| 268 | errorString = QLocalServer::tr("%1: Permission denied").arg(function); | - | ||||||||||||||||||||||||
| 269 | error = QAbstractSocket::SocketAccessError; | - | ||||||||||||||||||||||||
| 270 | break; | - | ||||||||||||||||||||||||
| 271 | case 40: | - | ||||||||||||||||||||||||
| 272 | case 2: | - | ||||||||||||||||||||||||
| 273 | case 36: | - | ||||||||||||||||||||||||
| 274 | case 30: | - | ||||||||||||||||||||||||
| 275 | case 20: | - | ||||||||||||||||||||||||
| 276 | errorString = QLocalServer::tr("%1: Name error").arg(function); | - | ||||||||||||||||||||||||
| 277 | error = QAbstractSocket::HostNotFoundError; | - | ||||||||||||||||||||||||
| 278 | break; | - | ||||||||||||||||||||||||
| 279 | case 98: | - | ||||||||||||||||||||||||
| 280 | errorString = QLocalServer::tr("%1: Address in use").arg(function); | - | ||||||||||||||||||||||||
| 281 | error = QAbstractSocket::AddressInUseError; | - | ||||||||||||||||||||||||
| 282 | break; | - | ||||||||||||||||||||||||
| 283 | - | |||||||||||||||||||||||||
| 284 | default: | - | ||||||||||||||||||||||||
| 285 | errorString = QLocalServer::tr("%1: Unknown error %2") | - | ||||||||||||||||||||||||
| 286 | .arg(function).arg((*__errno_location ())); | - | ||||||||||||||||||||||||
| 287 | error = QAbstractSocket::UnknownSocketError; | - | ||||||||||||||||||||||||
| 288 | - | |||||||||||||||||||||||||
| 289 | - | |||||||||||||||||||||||||
| 290 | - | |||||||||||||||||||||||||
| 291 | } | - | ||||||||||||||||||||||||
| 292 | } | - | ||||||||||||||||||||||||
| 293 | - | |||||||||||||||||||||||||
| 294 | - | |||||||||||||||||||||||||
| Switch to Source code | Preprocessed file |