Преглед изворни кода

Create socket using IP-version agnostic helper functions

This should add support for IPv6.
Oxan van Leeuwen пре 3 година
родитељ
комит
d748b1b8e0
1 измењених фајлова са 6 додато и 12 уклоњено
  1. 6 12
      components/stream_server/stream_server.cpp

+ 6 - 12
components/stream_server/stream_server.cpp

@@ -30,17 +30,11 @@ using namespace esphome;
 void StreamServerComponent::setup() {
     ESP_LOGCONFIG(TAG, "Setting up stream server...");
 
-    struct sockaddr_in bind_addr = {
-        .sin_len = sizeof(struct sockaddr_in),
-        .sin_family = AF_INET,
-        .sin_port = htons(this->port_),
-        .sin_addr = {
-            .s_addr = ESPHOME_INADDR_ANY,
-        }
-    };
+    struct sockaddr_storage bind_addr;
+    socklen_t bind_addrlen = socket::set_sockaddr_any(reinterpret_cast<struct sockaddr *>(&bind_addr), sizeof(bind_addr), htons(this->port_));
 
-    this->socket_ = socket::socket(AF_INET, SOCK_STREAM, PF_INET);
-    this->socket_->bind(reinterpret_cast<struct sockaddr *>(&bind_addr), sizeof(struct sockaddr_in));
+    this->socket_ = socket::socket_ip(SOCK_STREAM, PF_INET);
+    this->socket_->bind(reinterpret_cast<struct sockaddr *>(&bind_addr), bind_addrlen);
     this->socket_->listen(8);
 }
 
@@ -62,8 +56,8 @@ void StreamServerComponent::on_shutdown() {
 }
 
 void StreamServerComponent::accept() {
-    struct sockaddr_in client_addr;
-    socklen_t client_addrlen = sizeof(struct sockaddr_in);
+    struct sockaddr_storage client_addr;
+    socklen_t client_addrlen = sizeof(client_addr);
     std::unique_ptr<socket::Socket> socket = this->socket_->accept(reinterpret_cast<struct sockaddr *>(&client_addr), &client_addrlen);
     if (!socket)
         return;