Data marshaling wrapper for a TCP server
The wrapper seems pretty good to me.  The only change you might consider is that CreateWrapper really only needs to run once for each type; since these are structs it can return copies of the same empty object each time.  Something like this should work:

static class EmptyHolder&lt;T&gt; where T : struct
{
    public static T EmptyInstance;
    // assign EmptyInstance in static constructor
}


and then:

public static unsafe T CreateEmpty&lt;T&gt;() where T : struct
{
    return EmptyHolder&lt;T&gt;.EmptyInstance;
}


Of course there's a tradeoff of an uncollectable memory for each type you call this with.  And with anything performance-related, you'll need to measure to see if it delivers any benefit.  The original code should be pretty fast so maybe it's not significant.

There shouldn't be any danger in no matter how often you call stackalloc, by definition it's not possible for any two such calls to affect the same stack at the same time.  And there's no danger of any sort of recursion that would have more than 1 of these allocations on the same stack since the block is freed at the end of this function.