File indexing completed on 2026-04-17 08:35:03
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef _THRIFT_TRANSPORT_TSERVERSOCKET_H_
0021 #define _THRIFT_TRANSPORT_TSERVERSOCKET_H_ 1
0022
0023 #include <functional>
0024
0025 #include <thrift/concurrency/Mutex.h>
0026 #include <thrift/transport/PlatformSocket.h>
0027 #include <thrift/transport/TServerTransport.h>
0028
0029 #include <sys/types.h>
0030 #ifdef HAVE_SYS_SOCKET_H
0031 #include <sys/socket.h>
0032 #endif
0033 #ifdef HAVE_NETDB_H
0034 #include <netdb.h>
0035 #endif
0036
0037 namespace apache {
0038 namespace thrift {
0039 namespace transport {
0040
0041 class TSocket;
0042
0043
0044
0045
0046
0047
0048 class TServerSocket : public TServerTransport {
0049 public:
0050 typedef std::function<void(THRIFT_SOCKET fd)> socket_func_t;
0051
0052 const static int DEFAULT_BACKLOG = 1024;
0053
0054
0055
0056
0057
0058
0059 TServerSocket(int port);
0060
0061
0062
0063
0064
0065
0066
0067
0068 TServerSocket(int port, int sendTimeout, int recvTimeout);
0069
0070
0071
0072
0073
0074
0075
0076 TServerSocket(const std::string& address, int port);
0077
0078
0079
0080
0081
0082
0083 TServerSocket(const std::string& path);
0084
0085 ~TServerSocket() override;
0086
0087
0088 bool isOpen() const override;
0089
0090 void setSendTimeout(int sendTimeout);
0091 void setRecvTimeout(int recvTimeout);
0092
0093 void setAcceptTimeout(int accTimeout);
0094 void setAcceptBacklog(int accBacklog);
0095
0096 void setRetryLimit(int retryLimit);
0097 void setRetryDelay(int retryDelay);
0098
0099 void setKeepAlive(bool keepAlive) { keepAlive_ = keepAlive; }
0100
0101 void setTcpSendBuffer(int tcpSendBuffer);
0102 void setTcpRecvBuffer(int tcpRecvBuffer);
0103
0104
0105
0106
0107 void setListenCallback(const socket_func_t& listenCallback) { listenCallback_ = listenCallback; }
0108
0109
0110
0111
0112
0113 void setAcceptCallback(const socket_func_t& acceptCallback) { acceptCallback_ = acceptCallback; }
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 void setInterruptableChildren(bool enable);
0127
0128 THRIFT_SOCKET getSocketFD() override { return serverSocket_; }
0129
0130 int getPort() const;
0131
0132 std::string getPath() const;
0133
0134 bool isUnixDomainSocket() const;
0135
0136 void listen() override;
0137 void interrupt() override;
0138 void interruptChildren() override;
0139 void close() override;
0140
0141 protected:
0142 std::shared_ptr<TTransport> acceptImpl() override;
0143 virtual std::shared_ptr<TSocket> createSocket(THRIFT_SOCKET client);
0144 bool interruptableChildren_;
0145 std::shared_ptr<THRIFT_SOCKET> pChildInterruptSockReader_;
0146
0147 private:
0148 void notify(THRIFT_SOCKET notifySock);
0149 void _setup_sockopts();
0150 void _setup_unixdomain_sockopts();
0151 void _setup_tcp_sockopts();
0152
0153 int port_;
0154 std::string address_;
0155 std::string path_;
0156 THRIFT_SOCKET serverSocket_;
0157 int acceptBacklog_;
0158 int sendTimeout_;
0159 int recvTimeout_;
0160 int accTimeout_;
0161 int retryLimit_;
0162 int retryDelay_;
0163 int tcpSendBuffer_;
0164 int tcpRecvBuffer_;
0165 bool keepAlive_;
0166 bool listening_;
0167
0168 concurrency::Mutex rwMutex_;
0169 THRIFT_SOCKET interruptSockWriter_;
0170 THRIFT_SOCKET interruptSockReader_;
0171 THRIFT_SOCKET childInterruptSockWriter_;
0172
0173 socket_func_t listenCallback_;
0174 socket_func_t acceptCallback_;
0175 };
0176 }
0177 }
0178 }
0179
0180 #endif