Store the winsock per-thread data in NtCurrentTeb()->WinSockData
instead of using TlsAlloc.

diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 5de9b5a..c4f652b 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -222,7 +222,6 @@
     int pe_len;
 };
 
-static DWORD tls_index = TLS_OUT_OF_INDEXES; /* TLS index for per-thread data */
 static INT num_startup;          /* reference counter */
 static FARPROC blocking_hook = WSA_DefaultBlockingHook;
 
@@ -405,19 +404,19 @@
 
 static struct per_thread_data *get_per_thread_data(void)
 {
-    struct per_thread_data * ptb = TlsGetValue( tls_index );
+    struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
     /* lazy initialization */
     if (!ptb)
     {
         ptb = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ptb) );
-        TlsSetValue( tls_index, ptb );
+        NtCurrentTeb()->WinSockData = ptb;
     }
     return ptb;
 }
 
 static void free_per_thread_data(void)
 {
-    struct per_thread_data * ptb = TlsGetValue( tls_index );
+    struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
 
     if (!ptb) return;
 
@@ -430,6 +429,7 @@
     ptb->pe_buffer = NULL;
 
     HeapFree( GetProcessHeap(), 0, ptb );
+    NtCurrentTeb()->WinSockData = NULL;
 }
 
 /***********************************************************************
@@ -440,11 +440,9 @@
     TRACE("%p 0x%lx %p\n", hInstDLL, fdwReason, fImpLoad);
     switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
-        tls_index = TlsAlloc();
         break;
     case DLL_PROCESS_DETACH:
         free_per_thread_data();
-        TlsFree( tls_index );
         num_startup = 0;
         break;
     case DLL_THREAD_DETACH:
diff --git a/include/thread.h b/include/thread.h
index baaf6c1..697c417 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -110,12 +110,20 @@
     PVOID        DeallocationStack;          /* -2- e0c Base of the stack */
     LPVOID       TlsSlots[64];               /* -2- e10 Thread local storage */
     LIST_ENTRY   TlsLinks;                   /* -2- f10 */
-    DWORD        pad8[1];                    /* --n f18 */
-    PVOID        ReservedForNtRpc;           /* -2- f1c used by rpcrt4 */
-    DWORD        pad9[24];                   /* --n f20 */
-    PVOID        ReservedForOle;             /* -2- f80 used by ole32 (IErrorInfo*) */
-    PVOID        pad10[4];                   /* --n f84 */
-    PVOID       *TlsExpansionSlots;          /* -2- f94 */
+    PVOID        Vdm;                        /* f18 */
+    PVOID        ReservedForNtRpc;           /* f1c */
+    PVOID        DbgSsReserved[2];           /* f20 */
+    ULONG        HardErrorDisabled;          /* f28 */
+    PVOID        Instrumentation[16];        /* f2c */
+    PVOID        WinSockData;                /* f6c */
+    ULONG        GdiBatchCount;              /* f70 */
+    ULONG        Spare2;                     /* f74 */
+    ULONG        Spare3;                     /* f78 */
+    ULONG        Spare4;                     /* f7c */
+    PVOID        ReservedForOle;             /* f80 */
+    ULONG        WaitingOnLoaderLock;        /* f84 */
+    PVOID        Reserved5[3];               /* f88 */
+    PVOID       *TlsExpansionSlots;          /* f94 */
 } TEB;
 #endif /* WINE_TEB_DEFINED */