<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Embassy on Notebook</title><link>http://blog.cmac4603.dev/tags/embassy/</link><description>Recent content in Embassy on Notebook</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 09 Aug 2026 12:02:50 +0100</lastBuildDate><atom:link href="http://blog.cmac4603.dev/tags/embassy/index.xml" rel="self" type="application/rss+xml"/><item><title>ESP32, Embassy &amp; Sockets</title><link>http://blog.cmac4603.dev/posts/esp32-embassy-sockets/</link><pubDate>Sun, 09 Aug 2026 12:02:50 +0100</pubDate><guid>http://blog.cmac4603.dev/posts/esp32-embassy-sockets/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I was running a webserver (&lt;a href="https://crates.io/crates/picoserve"&gt;picoserve&lt;/a&gt;), but I was only able to run one worker; somewhere in the picoserve code I was running into a panic from &lt;a href="https://docs.rs/smoltcp/latest/smoltcp/iface/struct.SocketSet.html#method.add"&gt;SocketSet add&lt;/a&gt; function, specifically this panic:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;match&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;mut&lt;/span&gt; self.sockets {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ManagedSlice::Borrowed(_) &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;panic!&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;adding a socket to a full SocketSet&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#[cfg(feature = &lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;alloc&amp;#34;&lt;/span&gt;&lt;span style="color:#75715e"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ManagedSlice::Owned(sockets) &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sockets.push(SocketStorage { inner: None });
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; index &lt;span style="color:#f92672"&gt;=&lt;/span&gt; sockets.len() &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; put(index, &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;mut&lt;/span&gt; sockets[index], socket)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The problem, I &lt;em&gt;eventually&lt;/em&gt; figured out, was that the network stack created with &lt;a href="https://crates.io/crates/embassy-net"&gt;&lt;code&gt;embassy-net&lt;/code&gt;&lt;/a&gt; was being initialized with 3 sockets: one for DHCP, one for DNS, and one for the rest of the code.&lt;/p&gt;</description></item></channel></rss>