/** * Copyright (C) Mellanox Technologies Ltd. 2018. ALL RIGHTS RESERVED. * * See file LICENSE for terms. */ #ifndef SA_TCP_H_ #define SA_TCP_H_ #include "sa_base.h" #include "sa_util.h" class tcp_socket : public file_desc { public: tcp_socket(); tcp_socket(int fd); virtual ~tcp_socket(); private: static int create_socket(); }; class tcp_connection : public connection { public: tcp_connection(const struct sockaddr *addr, socklen_t addrlen); tcp_connection(int fd); virtual void add_to_evpoll(evpoll_set& evpoll); virtual size_t send(const char *buffer, size_t size); virtual size_t recv(char *buffer, size_t size); virtual bool is_closed() const; private: void initialize(); tcp_socket m_socket; bool m_is_closed; }; class tcp_worker : public worker { public: tcp_worker(const struct sockaddr *listen_addr, socklen_t addrlen); virtual void add_to_evpoll(evpoll_set& evpoll); virtual conn_ptr_t connect(const struct sockaddr *addr, socklen_t addrlen); virtual void wait(const evpoll_set& evpoll, conn_handler_t conn_handler, data_handler_t data_handler, int timeout_ms); private: tcp_socket m_server_socket; }; #endif