<div dir="ltr">Shouldn&#39;t this patch go to the new OpenSmalltalk-VM repository at:<div><a href="https://github.com/OpenSmalltalk/opensmalltalk-vm">https://github.com/OpenSmalltalk/opensmalltalk-vm</a> ?</div><div><br></div><div>Best,</div><div>Fabio</div><div><br><div class="GmSign">-- <br></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Aug 28, 2016 at 5:56 PM &lt;<a href="mailto:commits@squeakvm.org">commits@squeakvm.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Revision: 3748<br>
Author:   lewis<br>
Date:     2016-08-28 08:56:19 -0700 (Sun, 28 Aug 2016)<br>
Log Message:<br>
-----------<br>
Mantis 0007819: Add Systemd socket activation patch for the VM in SocketPlugin<br>
<br>
Patch by Max Leske &lt;maxleske at <a href="http://gmail.com" rel="noreferrer" target="_blank">gmail.com</a>&gt; and Nik Lutz, with socket type definitions as per oscog branch.<br>
<br>
Note that ProvidedTCPSocketType is now defined as 65536, whereas the original patch (as implemented for cmsbox) defined it as 2.<br>
<br>
This update is already present in oscog for Cog and Spur VMs.<br>
<br>
Modified Paths:<br>
--------------<br>
    trunk/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c<br>
<br>
Modified: trunk/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c<br>
===================================================================<br>
--- trunk/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c    2016-08-10 19:32:25 UTC (rev 3747)<br>
+++ trunk/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c    2016-08-28 15:56:19 UTC (rev 3748)<br>
@@ -93,6 +93,12 @@<br>
 # define MAXHOSTNAMELEN        256<br>
 #endif<br>
<br>
+#ifdef HAVE_SD_DAEMON<br>
+# include &lt;systemd/sd-daemon.h&gt;<br>
+#else<br>
+# define SD_LISTEN_FDS_START 3<br>
+# define sd_listen_fds(u) 0<br>
+#endif<br>
<br>
 /* debugging stuff. can probably be deleted */<br>
<br>
@@ -117,10 +123,22 @@<br>
<br>
 /*** Socket types ***/<br>
<br>
-#define TCPSocketType          0<br>
-#define UDPSocketType          1<br>
+#define TCPSocketType                  0 /* SOCK_STREAM on AF_INET or AF_INET6 */<br>
+#define UDPSocketType                  1 /* SOCK_DGRAM on AF_INET or AF_INET6 */<br>
+#define RAWSocketType                  2 /* SOCK_RAW on AF_INET or AF_INET6 */<br>
+#define SeqPacketSocketType            3 /* SOCK_SEQPACKET on AF_INET or AF_INET6 */<br>
+#define ReliableDGramSocketType        4 /* SOCK_RDM on AF_INET or AF_INET6 */<br>
<br>
+#define ReuseExistingSocket            65536<br>
<br>
+#define ProvidedTCPSocketType          (TCPSocketType + ReuseExistingSocket)<br>
+#define ProvidedUDPSocketType          (UDPSocketType + ReuseExistingSocket)<br>
+#define ProvidedRAWSocketType          (RAWSocketType + ReuseExistingSocket)<br>
+#define ProvidedSeqPacketSocketType    (SeqPacketSocketType + ReuseExistingSocket)<br>
+#define ProvidedReliableDGramSocketType        (ReliableDGramSocketType + ReuseExistingSocket)<br>
+<br>
+<br>
+<br>
 /*** Resolver states ***/<br>
<br>
 #define ResolverUninitialised  0<br>
@@ -549,6 +567,20 @@<br>
       /* --- UDP --- */<br>
       newSocket= socket(domain, SOCK_DGRAM, 0);<br>
     }<br>
+  else if (ProvidedTCPSocketType == socketType)<br>
+    {<br>
+      /* --- Existing socket --- */<br>
+      if (sd_listen_fds(0) == 0)<br>
+        {<br>
+          socketType = TCPSocketType;<br>
+          newSocket= SD_LISTEN_FDS_START + 0;<br>
+        }<br>
+      else<br>
+        {<br>
+          interpreterProxy-&gt;success(false);<br>
+          return;<br>
+        }<br>
+    }<br>
   if (-1 == newSocket)<br>
     {<br>
       /* socket() failed, or incorrect socketType */<br>
<br>
</blockquote></div></div></div>