MCPcopy Create free account
hub / github.com/apache/thrift / acceptImpl

Method acceptImpl

lib/cpp/src/thrift/transport/TNonblockingServerSocket.cpp:552–608  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

550}
551
552shared_ptr<TSocket> TNonblockingServerSocket::acceptImpl() {
553 if (serverSocket_ == THRIFT_INVALID_SOCKET) {
554 throw TTransportException(TTransportException::NOT_OPEN,
555 "TNonblockingServerSocket not listening");
556 }
557
558 struct sockaddr_storage clientAddress;
559 int size = sizeof(clientAddress);
560 THRIFT_SOCKET clientSocket
561 = ::accept(serverSocket_, (struct sockaddr*)&clientAddress, (socklen_t*)&size);
562
563 if (clientSocket == THRIFT_INVALID_SOCKET) {
564 int errno_copy = THRIFT_GET_SOCKET_ERROR;
565 TOutput::instance().perror("TNonblockingServerSocket::acceptImpl() ::accept() ", errno_copy);
566 throw TTransportException(TTransportException::UNKNOWN, "accept()", errno_copy);
567 }
568
569 // Explicitly set this socket to NONBLOCK mode
570 int flags = THRIFT_FCNTL(clientSocket, THRIFT_F_GETFL, 0);
571 if (flags == -1) {
572 int errno_copy = THRIFT_GET_SOCKET_ERROR;
573 ::THRIFT_CLOSESOCKET(clientSocket);
574 TOutput::instance().perror("TNonblockingServerSocket::acceptImpl() THRIFT_FCNTL() THRIFT_F_GETFL ", errno_copy);
575 throw TTransportException(TTransportException::UNKNOWN,
576 "THRIFT_FCNTL(THRIFT_F_GETFL)",
577 errno_copy);
578 }
579
580 if (-1 == THRIFT_FCNTL(clientSocket, THRIFT_F_SETFL, flags | THRIFT_O_NONBLOCK)) {
581 int errno_copy = THRIFT_GET_SOCKET_ERROR;
582 ::THRIFT_CLOSESOCKET(clientSocket);
583 TOutput::instance()
584 .perror("TNonblockingServerSocket::acceptImpl() THRIFT_FCNTL() THRIFT_F_SETFL ~THRIFT_O_NONBLOCK ",
585 errno_copy);
586 throw TTransportException(TTransportException::UNKNOWN,
587 "THRIFT_FCNTL(THRIFT_F_SETFL)",
588 errno_copy);
589 }
590
591 shared_ptr<TSocket> client = createSocket(clientSocket);
592 client->setPath(path_);
593 if (sendTimeout_ > 0) {
594 client->setSendTimeout(sendTimeout_);
595 }
596 if (recvTimeout_ > 0) {
597 client->setRecvTimeout(recvTimeout_);
598 }
599 if (keepAlive_) {
600 client->setKeepAlive(keepAlive_);
601 }
602 client->setCachedAddress((sockaddr*)&clientAddress, size);
603
604 if (acceptCallback_)
605 acceptCallback_(clientSocket);
606
607 return client;
608}
609

Callers

nothing calls this directly

Calls 7

setCachedAddressMethod · 0.80
TTransportExceptionClass · 0.70
perrorMethod · 0.45
setPathMethod · 0.45
setSendTimeoutMethod · 0.45
setRecvTimeoutMethod · 0.45
setKeepAliveMethod · 0.45

Tested by

no test coverage detected