//--STRIP
#ifndef SOCKET_H
#define SOCKET_H
//--STRIP

//Based on:

/**
 *
 *  Socket.h
 *  An Tao
 *
 *  Public header file in trantor lib.
 *
 *  Copyright 2018, An Tao.  All rights reserved.
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the License file.
 *
 *
 */

//--STRIP
#include "inet_address.h"
//--STRIP

class Socket {
public:
	void create_net_socket();
	void create(int family);
	void close_socket();

	int connect(const InetAddress &address);
	int bind_address(const InetAddress &address);
	int listen();
	int accept(Socket *sock);

	int close_write();

	int read(char *buffer, uint64_t len);
	int send(const char *buffer, uint64_t len);

	bool is_self_connect();

	void set_tcp_nodelay(bool on);
	void set_reuse_addr(bool on);
	int set_reuse_port(bool on);
	void set_keep_alive(bool on);

	int set_non_block();
	int set_close_on_exit();

	int get_error();

	struct sockaddr_in6 get_local_addr(int *r_err = NULL);
	struct sockaddr_in6 get_peer_addr(int *r_err = NULL);

	static int global_init();

	Socket();
	Socket(int socketFD, const InetAddress &address);
	~Socket();

	int _socket;
	InetAddress _address;
};

//--STRIP
#endif // SOCKET_H
//--STRIP