| OLD | NEW |
| (Empty) |
| 1 /* Copyright (c) 2008 Twisted Matrix Laboratories. | |
| 2 * See LICENSE for details. | |
| 3 */ | |
| 4 | |
| 5 | |
| 6 #include<winsock2.h> | |
| 7 #include<assert.h> | |
| 8 #include<stdio.h> | |
| 9 #include<stdlib.h> | |
| 10 | |
| 11 #ifndef WSAID_CONNECTEX | |
| 12 #define WSAID_CONNECTEX {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74
,0x06,0x3e}} | |
| 13 #endif | |
| 14 #ifndef WSAID_GETACCEPTEXSOCKADDRS | |
| 15 #define WSAID_GETACCEPTEXSOCKADDRS {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x8
0,0x5f,0x48,0xa1,0x92}} | |
| 16 #endif | |
| 17 #ifndef WSAID_ACCEPTEX | |
| 18 #define WSAID_ACCEPTEX {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,
0xa1,0x92}} | |
| 19 #endif | |
| 20 /*#ifndef WSAID_TRANSMITFILE | |
| 21 #define WSAID_TRANSMITFILE {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0
x48,0xa1,0x92}} | |
| 22 #endif*/ | |
| 23 | |
| 24 | |
| 25 void *lpAcceptEx, *lpGetAcceptExSockaddrs, *lpConnectEx, *lpTransmitFile; | |
| 26 | |
| 27 int initPointer(SOCKET s, void **fun, GUID guid) { | |
| 28 int res; | |
| 29 DWORD bytes; | |
| 30 | |
| 31 *fun = NULL; | |
| 32 res = WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, | |
| 33 &guid, sizeof(guid), | |
| 34 fun, sizeof(fun), | |
| 35 &bytes, NULL, NULL); | |
| 36 return !res; | |
| 37 } | |
| 38 | |
| 39 int initWinsockPointers() { | |
| 40 SOCKET s = socket(AF_INET, SOCK_STREAM, 0); | |
| 41 /* I hate C */ | |
| 42 GUID guid1 = WSAID_ACCEPTEX; | |
| 43 GUID guid2 = WSAID_GETACCEPTEXSOCKADDRS; | |
| 44 GUID guid3 = WSAID_CONNECTEX; | |
| 45 /*GUID guid4 = WSAID_TRANSMITFILE;*/ | |
| 46 if (!s) { | |
| 47 return 0; | |
| 48 } | |
| 49 if (!initPointer(s, &lpAcceptEx, guid1)) | |
| 50 { | |
| 51 return 0; | |
| 52 } | |
| 53 if (!initPointer(s, &lpGetAcceptExSockaddrs, guid2)) { | |
| 54 return 0; | |
| 55 } | |
| 56 if (!initPointer(s, &lpConnectEx, guid3)) { | |
| 57 return 0; | |
| 58 }; | |
| 59 /*initPointer(s, &lpTransmitFile, guid4);*/ | |
| 60 return 1; | |
| 61 } | |
| 62 | |
| OLD | NEW |