ioil
ioil

Reputation: 101

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
struct 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 . . .

Upvotes: 3

Views: 3688

Answers (3)

khader
khader

Reputation: 11

#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

Upvotes: 1

default
default

Reputation: 11635

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.

Upvotes: 2

Alon
Alon

Reputation: 4952

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"

Upvotes: 2

Related Questions