parent
aae541f9c0
commit
0a8c419dee
|
@ -73,6 +73,7 @@ class Open_socket : public Genode::List<Open_socket>::Element
|
||||||
enum { READ_BUF_SIZE = 4096 };
|
enum { READ_BUF_SIZE = 4096 };
|
||||||
char _read_buf[READ_BUF_SIZE];
|
char _read_buf[READ_BUF_SIZE];
|
||||||
Genode::size_t _read_buf_bytes_used;
|
Genode::size_t _read_buf_bytes_used;
|
||||||
|
Genode::size_t _read_buf_bytes_read;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establish remote connection
|
* Establish remote connection
|
||||||
|
@ -196,13 +197,18 @@ class Open_socket : public Genode::List<Open_socket>::Element
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flush internal read buffer into destination buffer
|
* Read out internal read buffer and copy into destination buffer.
|
||||||
*/
|
*/
|
||||||
Genode::size_t flush_read_buffer(char *dst, Genode::size_t dst_len)
|
Genode::size_t read_buffer(char *dst, Genode::size_t dst_len)
|
||||||
{
|
{
|
||||||
Genode::size_t num_bytes = Genode::min(dst_len, _read_buf_bytes_used);
|
Genode::size_t num_bytes = Genode::min(dst_len, _read_buf_bytes_used -
|
||||||
Genode::memcpy(dst, _read_buf, num_bytes);
|
_read_buf_bytes_read);
|
||||||
_read_buf_bytes_used = 0;
|
Genode::memcpy(dst, _read_buf + _read_buf_bytes_read, num_bytes);
|
||||||
|
|
||||||
|
_read_buf_bytes_read += num_bytes;
|
||||||
|
if (_read_buf_bytes_read >= _read_buf_bytes_used)
|
||||||
|
_read_buf_bytes_used = _read_buf_bytes_read = 0;
|
||||||
|
|
||||||
return num_bytes;
|
return num_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,7 +365,9 @@ Open_socket_pool *open_socket_pool()
|
||||||
|
|
||||||
|
|
||||||
Open_socket::Open_socket(int tcp_port)
|
Open_socket::Open_socket(int tcp_port)
|
||||||
: _listen_sd(_remote_listen(tcp_port)), _sd(-1)
|
:
|
||||||
|
_listen_sd(_remote_listen(tcp_port)), _sd(-1),
|
||||||
|
_read_buf_bytes_used(0), _read_buf_bytes_read(0)
|
||||||
{
|
{
|
||||||
open_socket_pool()->insert(this);
|
open_socket_pool()->insert(this);
|
||||||
}
|
}
|
||||||
|
@ -403,7 +411,7 @@ namespace Terminal {
|
||||||
Genode::size_t _read(Genode::size_t dst_len)
|
Genode::size_t _read(Genode::size_t dst_len)
|
||||||
{
|
{
|
||||||
Genode::size_t num_bytes =
|
Genode::size_t num_bytes =
|
||||||
flush_read_buffer(_io_buffer.local_addr<char>(),
|
read_buffer(_io_buffer.local_addr<char>(),
|
||||||
Genode::min(_io_buffer.size(), dst_len));
|
Genode::min(_io_buffer.size(), dst_len));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue
Block a user