Prepare more fields for TCP socket

This commit is contained in:
Baptiste Wicht 2016-09-14 19:08:02 +02:00
parent b144b1c5cb
commit 2f88feb2f7
2 changed files with 22 additions and 5 deletions

View File

@ -29,7 +29,9 @@ struct socket {
socket_protocol protocol;
size_t next_fd;
bool listen;
size_t local_port;
bool connected;
uint32_t local_port;
uint32_t server_port;
std::vector<network::ethernet::packet> packets;
@ -38,7 +40,7 @@ struct socket {
socket(){}
socket(size_t id, socket_domain domain, socket_type type, socket_protocol protocol, size_t next_fd, bool listen)
: id(id), domain(domain), type(type), protocol(protocol), next_fd(next_fd), listen(listen), local_port(0) {}
: id(id), domain(domain), type(type), protocol(protocol), next_fd(next_fd), listen(listen) {}
void invalidate(){
id = 0xFFFFFFFF;

View File

@ -257,7 +257,15 @@ std::expected<network::socket_fd_t> network::open(network::socket_domain domain,
return std::make_expected_from_error<network::socket_fd_t>(std::ERROR_SOCKET_INVALID_TYPE_PROTOCOL);
}
return scheduler::register_new_socket(domain, type, protocol);
auto socket_fd = scheduler::register_new_socket(domain, type, protocol);
// Initialize TCP connection values
auto& socket = scheduler::get_socket(socket_fd);
socket.connected = false;
socket.local_port = 0;
socket.server_port = 0;
return socket_fd;
}
void network::close(size_t fd){
@ -394,12 +402,19 @@ std::expected<size_t> network::connect(socket_fd_t socket_fd, network::ip::addre
return std::make_unexpected<size_t>(std::ERROR_SOCKET_INVALID_TYPE);
}
socket.local_port = local_port++;
socket.local_port = local_port++;
socket.server_port = port;
logging::logf(logging::log_level::TRACE, "network: %u stream socket %u was assigned port %u\n", scheduler::get_pid(), socket_fd, socket.local_port);
if(socket.protocol == socket_protocol::TCP){
network::tcp::connect(select_interface(server), server, socket.local_port, port);
auto connection = network::tcp::connect(select_interface(server), server, socket.local_port, port);
if(connection){
socket.connected = true;
} else {
return std::make_unexpected<size_t>(connection.error());
}
} else {
return std::make_unexpected<size_t>(std::ERROR_SOCKET_INVALID_TYPE_PROTOCOL);
}