Acabo de empezar a aprender winsock a través del libro "Beej's guide to network programming". Estoy programando en Windows y ejecutándolo a través de gcc. Esto es solo el comienzo de la escritura de mi primer programa de servidor, pero me da estos errores cuando intento compilar.winsock error de compilación, no puede encontrar las estructuras addrinfo y algunas funciones relacionadas
/* Server */
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;
const int winsockVersion = 2;
#define BACKLOG 10
#define PORT 3000
int main(void){
WSADATA wsadata;
if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){
struct addrinfo hints, *res;
memset(&hints,0,sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if (getaddrinfo(NULL,PORT,&hints,&res) == 0){
cout<<"-Call to get addrinfo successful!." << endl;
}
cout<<"res af_family" << res->ai_family << endl;
}
//clear stuff
if(WSACleanup() != 0){
cout<<"-WSACleanup unsuccessful" << endl;
}else{
cout<<"-WSACleanup successful" << endl;
}
return 0;
}
estos son los errores que estoy recibiendo
g++ -o server.exe server.cpp -lws2_32
Process started >>>
server.cpp: In function `int main()':
server.cpp:20: error: aggregate `addrinfo hints' has incomplete type and cannot be defined
server.cpp:25: error: `AI_PASSIVE' was not declared in this scope
server.cpp:27: error: `getaddrinfo' was not declared in this scope
server.cpp:31: error: invalid use of undefined type `struct addrinfo'
server.cpp:20: error: forward declaration of `struct addrinfo'
server.cpp:54:2: warning: no newline at end of file
<<< Process finished.
¿No deberían las estructuras y funciones se definirán en cualquiera windows.h o winsock.h ?.
SOLUCIÓN
EDITAR a cualquier persona que se topa con esto, añadir
#define _WIN32_WINNT 0x501
#include <ws2tcpip.h>
en la parte superior de la fuente si getaddrinfo dice que su no declarado.
hola gracias por ese #define _WIN32_WINNT 0x501 me salvó algunos problemas :) – Lefteris
Sin problemas :-). – silent
Estoy en Win7, VS2015, y hasta ahora no he tenido que agregar la declaración #define, pero DID necesito agregar la declaración #include. Mi entorno de compilación puede ser un poco extraño ya que estoy trabajando con un conjunto de bibliotecas antiguas. – Andrew