1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 20 #ifndef _THRIFT_TRANSPORT_TFDTRANSPORT_H_ 21 #define _THRIFT_TRANSPORT_TFDTRANSPORT_H_ 1 22 23 #include <string> 24 #ifdef HAVE_SYS_TIME_H 25 #include <sys/time.h> 26 #endif 27 28 #include <thrift/transport/TTransport.h> 29 #include <thrift/transport/TVirtualTransport.h> 30 31 namespace apache { 32 namespace thrift { 33 namespace transport { 34 35 /** 36 * Dead-simple wrapper around a file descriptor. 37 * 38 */ 39 class TFDTransport : public TVirtualTransport<TFDTransport> { 40 public: 41 enum ClosePolicy { NO_CLOSE_ON_DESTROY = 0, CLOSE_ON_DESTROY = 1 }; 42 43 TFDTransport(int fd, ClosePolicy close_policy = NO_CLOSE_ON_DESTROY, 44 std::shared_ptr<TConfiguration> config = nullptr) TVirtualTransport(config)45 : TVirtualTransport(config), fd_(fd), close_policy_(close_policy) { 46 } 47 ~TFDTransport()48 ~TFDTransport() override { 49 if (close_policy_ == CLOSE_ON_DESTROY) { 50 try { 51 close(); 52 } catch (TTransportException& ex) { 53 GlobalOutput.printf("~TFDTransport TTransportException: '%s'", ex.what()); 54 } 55 } 56 } 57 isOpen()58 bool isOpen() const override { return fd_ >= 0; } 59 open()60 void open() override {} 61 62 void close() override; 63 64 uint32_t read(uint8_t* buf, uint32_t len); 65 66 void write(const uint8_t* buf, uint32_t len); 67 setFD(int fd)68 void setFD(int fd) { fd_ = fd; } getFD()69 int getFD() { return fd_; } 70 71 protected: 72 int fd_; 73 ClosePolicy close_policy_; 74 }; 75 } 76 } 77 } // apache::thrift::transport 78 79 #endif // #ifndef _THRIFT_TRANSPORT_TFDTRANSPORT_H_ 80