winsock compile error
The following errors are from a file with just windows and winsock2 included.
C:\Users\ioil\Desktop\dm\bin>dmc sockit.c
typedef struct fd_set {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(85) : Error: 'fd_set' is already defined
} fd_set;
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(88) : Error: identifier or '( declarator )' expected
stru开发者_JS百科ct timeval {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(129) : Error: 'timeval' is already defined
};
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(132) : Error: identifier or '( declarator )' expected
struct hostent {
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(185) : Error: 'hostent' is already defined
Fatal error: too many errors
--- errorlevel 1
C:\Users\ioil\Desktop\dm\bin>
What's already been tried : placing the winsock.dll file in the same directory as the compiler and program to be compiled, placing it in the system32 directory, and entering it in the registry with the regsrv32 command. Don't really know where to go from here, appreciate any advice . . .
windows.h includes winsock.h, which collides with the winsock2.h include file. prevent the first inclusion by defining WINSOCKAPI before you include windows.h:
:
#define _WINSOCKAPI_
#include "windows.h"
#include "winsock2.h"
You should place the winsock2.h before the windows.h as suggested by Iulian Şerbănoiu
#include <winsock2.h>
#include <windows.h>
You could also use the lean and mean macro:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
The reason is described on msdn: Creating a Basic Winsock Application
Also make sure that you link your program to the WS2_32.lib file (this is depending on what IDE you are using, for instance Visual Studio?)
In Visual Studio you go to Project > Properties > Linker > Additional includes (or something like that, not at a computer with visual studio at the moment..) This is also described in the link above.
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
use this avoid compilation errors
精彩评论