| Viewing file:  winsock_pointers.c (1.6 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/* Copyright (c) 2008 Twisted Matrix Laboratories.* See LICENSE for details.
 */
 
 
 #include<winsock2.h>
 #include<assert.h>
 #include<stdio.h>
 #include<stdlib.h>
 
 #ifndef WSAID_CONNECTEX
 #define WSAID_CONNECTEX {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
 #endif
 #ifndef WSAID_GETACCEPTEXSOCKADDRS
 #define WSAID_GETACCEPTEXSOCKADDRS {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 #endif
 #ifndef WSAID_ACCEPTEX
 #define WSAID_ACCEPTEX {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 #endif
 /*#ifndef WSAID_TRANSMITFILE
 #define WSAID_TRANSMITFILE {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 #endif*/
 
 
 void *lpAcceptEx, *lpGetAcceptExSockaddrs, *lpConnectEx, *lpTransmitFile;
 
 int initPointer(SOCKET s, void **fun, GUID guid) {
 int res;
 DWORD bytes;
 
 *fun = NULL;
 res = WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER,
 &guid, sizeof(guid),
 fun, sizeof(fun),
 &bytes, NULL, NULL);
 return !res;
 }
 
 int initWinsockPointers() {
 SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
 /* I hate C */
 GUID guid1 = WSAID_ACCEPTEX;
 GUID guid2 = WSAID_GETACCEPTEXSOCKADDRS;
 GUID guid3 = WSAID_CONNECTEX;
 /*GUID guid4 = WSAID_TRANSMITFILE;*/
 if (!s) {
 return 0;
 }
 if (!initPointer(s, &lpAcceptEx, guid1))
 {
 return 0;
 }
 if (!initPointer(s, &lpGetAcceptExSockaddrs, guid2)) {
 return 0;
 }
 if (!initPointer(s, &lpConnectEx, guid3)) {
 return 0;
 };
 /*initPointer(s, &lpTransmitFile, guid4);*/
 return 1;
 }
 
 
 |