Core: Add UNIX domain socket support
> [!NOTE] > > Later versions of Windows has support for `AF_UNIX`, so it could be > added.
This commit is contained in:
@ -32,62 +32,24 @@
|
||||
|
||||
#include "core/io/ip.h"
|
||||
#include "core/io/ip_address.h"
|
||||
#include "core/io/net_socket.h"
|
||||
#include "core/io/stream_peer.h"
|
||||
#include "core/io/stream_peer_socket.h"
|
||||
|
||||
class StreamPeerTCP : public StreamPeer {
|
||||
GDCLASS(StreamPeerTCP, StreamPeer);
|
||||
|
||||
public:
|
||||
enum Status {
|
||||
STATUS_NONE,
|
||||
STATUS_CONNECTING,
|
||||
STATUS_CONNECTED,
|
||||
STATUS_ERROR,
|
||||
};
|
||||
class StreamPeerTCP : public StreamPeerSocket {
|
||||
GDCLASS(StreamPeerTCP, StreamPeerSocket);
|
||||
|
||||
protected:
|
||||
Ref<NetSocket> _sock;
|
||||
uint64_t timeout = 0;
|
||||
Status status = STATUS_NONE;
|
||||
IPAddress peer_host;
|
||||
uint16_t peer_port = 0;
|
||||
|
||||
Error _connect(const String &p_address, int p_port);
|
||||
Error write(const uint8_t *p_data, int p_bytes, int &r_sent, bool p_block);
|
||||
Error read(uint8_t *p_buffer, int p_bytes, int &r_received, bool p_block);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void accept_socket(Ref<NetSocket> p_sock, IPAddress p_host, uint16_t p_port);
|
||||
void accept_socket(Ref<NetSocket> p_sock, const NetSocket::Address &p_addr) override;
|
||||
|
||||
Error bind(int p_port, const IPAddress &p_host);
|
||||
Error connect_to_host(const IPAddress &p_host, int p_port);
|
||||
IPAddress get_connected_host() const;
|
||||
int get_connected_port() const;
|
||||
int get_local_port() const;
|
||||
void disconnect_from_host();
|
||||
|
||||
int get_available_bytes() const override;
|
||||
Status get_status() const;
|
||||
|
||||
void set_no_delay(bool p_enabled);
|
||||
|
||||
// Poll socket updating its state.
|
||||
Error poll();
|
||||
|
||||
// Wait or check for writable, readable.
|
||||
Error wait(NetSocket::PollType p_type, int p_timeout = 0);
|
||||
|
||||
// Read/Write from StreamPeer
|
||||
Error put_data(const uint8_t *p_data, int p_bytes) override;
|
||||
Error put_partial_data(const uint8_t *p_data, int p_bytes, int &r_sent) override;
|
||||
Error get_data(uint8_t *p_buffer, int p_bytes) override;
|
||||
Error get_partial_data(uint8_t *p_buffer, int p_bytes, int &r_received) override;
|
||||
|
||||
StreamPeerTCP();
|
||||
~StreamPeerTCP();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(StreamPeerTCP::Status);
|
||||
|
||||
Reference in New Issue
Block a user