Sdílené sokety
Funkce WSADuplicateSocket umožňuje sdílení soketů mezi procesy. Zdrojový proces volá WSADuplicateSocket získat speciální WSAPROTOCOL_INFO strukturu pro identifikátor cílového procesu. K předání obsahu této struktury do cílového procesu používá určitý mechanismus komunikace mezi procesy. Cílový proces pak použije strukturu WSAPROTOCOL_INFO ve volání WSPSocket. Popisovač soketu vrácený touto funkcí bude dalším popisovačem soketu k podkladovému soketu, který se tak stane sdíleným. Sokety lze sdílet mezi vlákny v daném procesu bez použití WSADuplicateSocket funkce, protože popisovač soketu je platný ve všech vláknech procesu.
Dva (nebo více) popisovačů, které odkazují na sdílený soket, lze použít nezávisle, pokud jde o vstupně-výstupní operace. Rozhraní Winsock však neimplementuje žádný typ řízení přístupu, takže procesy musí koordinovat všechny operace ve sdíleném soketu. Typickým příkladem sdílení soketů je použití jednoho procesu pro vytváření soketů a navazování připojení. Tento proces pak předá sokety jiným procesům, které zodpovídají za výměnu informací.
WSADuplicateSocket funkce vytvoří popisovače soketů, nikoli základní soket. V důsledku toho se všechny stavy přidružené k soketu uchovávají společné napříč všemi popisovači. Například setsockopt operace provedená pomocí jednoho popisovače je následně viditelná pomocí getockopt z libovolného nebo všech popisovačů. Proces může volat closesocket na duplikovaném soketu a popisovač se uvolní. Základní soket však zůstává otevřený, dokud zavřít se volá s posledním zbývajícím popisovačem.
Oznámení u sdílených soketů podléhá obvyklým omezením funkcí WSAAsyncSelect a WSAEventSelect. Vydání některého z těchto volání pomocí některého ze sdílených popisovačů zruší všechny předchozí registrace události pro soket, bez ohledu na to, který popisovač byl použit k provedení této registrace. Proto by například nebylo možné zpracovat události příjmu FD_READ a proces B přijímat FD_WRITE události. V situacích, kdy se vyžaduje taková úzká koordinace, se doporučuje, aby vývojáři používali vlákna místo samostatných procesů.