------------------------------------------------------------------------------ Accept() - ------------------------------------------------------------------------------
| 211 | // |
| 212 | //------------------------------------------------------------------------------ |
| 213 | CActiveSocket *CPassiveSocket::Accept() |
| 214 | { |
| 215 | uint32 nSockLen; |
| 216 | CActiveSocket *pClientSocket = NULL; |
| 217 | SOCKET socket = CSimpleSocket::SocketError; |
| 218 | |
| 219 | if (m_nSocketType != CSimpleSocket::SocketTypeTcp) |
| 220 | { |
| 221 | SetSocketError(CSimpleSocket::SocketProtocolError); |
| 222 | return pClientSocket; |
| 223 | } |
| 224 | |
| 225 | pClientSocket = new CActiveSocket(); |
| 226 | |
| 227 | //-------------------------------------------------------------------------- |
| 228 | // Wait for incoming connection. |
| 229 | //-------------------------------------------------------------------------- |
| 230 | if (pClientSocket != NULL) |
| 231 | { |
| 232 | CSocketError socketErrno = SocketSuccess; |
| 233 | |
| 234 | m_timer.Initialize(); |
| 235 | m_timer.SetStartTime(); |
| 236 | |
| 237 | nSockLen = sizeof(m_stClientSockaddr); |
| 238 | |
| 239 | do |
| 240 | { |
| 241 | errno = 0; |
| 242 | socket = accept(m_socket, (struct sockaddr *)&m_stClientSockaddr, (socklen_t *)&nSockLen); |
| 243 | |
| 244 | if (socket != -1) |
| 245 | { |
| 246 | pClientSocket->SetSocketHandle(socket); |
| 247 | pClientSocket->TranslateSocketError(); |
| 248 | socketErrno = pClientSocket->GetSocketError(); |
| 249 | socklen_t nSockLen = sizeof(struct sockaddr); |
| 250 | |
| 251 | //------------------------------------------------------------- |
| 252 | // Store client and server IP and port information for this |
| 253 | // connection. |
| 254 | //------------------------------------------------------------- |
| 255 | getpeername(m_socket, (struct sockaddr *)&pClientSocket->m_stClientSockaddr, &nSockLen); |
| 256 | memcpy((void *)&pClientSocket->m_stClientSockaddr, (void *)&m_stClientSockaddr, nSockLen); |
| 257 | |
| 258 | memset(&pClientSocket->m_stServerSockaddr, 0, nSockLen); |
| 259 | getsockname(m_socket, (struct sockaddr *)&pClientSocket->m_stServerSockaddr, &nSockLen); |
| 260 | } |
| 261 | else |
| 262 | { |
| 263 | TranslateSocketError(); |
| 264 | socketErrno = GetSocketError(); |
| 265 | } |
| 266 | |
| 267 | } while (socketErrno == CSimpleSocket::SocketInterrupted); |
| 268 | |
| 269 | m_timer.SetEndTime(); |
| 270 |
nothing calls this directly
no test coverage detected