MCPcopy Create free account
hub / github.com/bulletphysics/bullet3 / Accept

Method Accept

examples/ThirdPartyLibs/clsocket/src/PassiveSocket.cpp:213–279  ·  view source on GitHub ↗

------------------------------------------------------------------------------ Accept() - ------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

211//
212//------------------------------------------------------------------------------
213CActiveSocket *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

Callers

nothing calls this directly

Calls 6

SetStartTimeMethod · 0.80
SetSocketHandleMethod · 0.80
TranslateSocketErrorMethod · 0.80
GetSocketErrorMethod · 0.80
SetEndTimeMethod · 0.80
InitializeMethod · 0.45

Tested by

no test coverage detected