[C] Erro Sockets

Aparicio

/dev/mod
Staff
Boas

Estou aqui a fazer um programa que utiliza sockets (windows) que compila e corre sem problemas no dev-cpp em C++, extensão .cpp portanto, mas quando tento compilar em C ou seja com a extensão .c dá erros como:
`hostent' undeclared (first use in this function)
`h' undeclared (first use in this function)
`in_addr' undeclared (first use in this function)
`sockaddr' undeclared (first use in this function)
No projecto do dev-cpp tenho a lib libws2_32.a e também já experimentei a libwsock32.a, mas continua a dar erro ao compilar em C.

Não é suposto funcionar tanto em C como C++???

Cumps
 
C está contido em C++, ou por outras palavras, é um subconjunto.

estranho seria fazeres um programa em c que corre com compilador e C mas não de C++

mostra o código que os erros mencionam sff.
 
Os erros são todos nesta parte de configuração e ligação do socket que não fui eu que escrevi, apenas adaptei.

Código:
    struct sockaddr_in addr;
    SOCKET s;
    int r;
    [B]hostent* h;[/B]
    
    memset((void*)&addr, 0, sizeof(addr));
    addr.sin_addr.s_addr = inet_addr(SERVIDOR);
    if(INADDR_NONE == addr.sin_addr.s_addr) h = gethostbyname(SERVIDOR);
    else h = gethostbyaddr((const char*)&addr.sin_addr, sizeof(struct sockaddr_in), AF_INET);
    
    addr.sin_family = AF_INET;
    [B]addr.sin_addr   = *((in_addr*)*h->h_addr_list);[/B]
    addr.sin_port   = htons(PORTA);
     
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  [B]  r = connect(s, (sockaddr*)&addr, sizeof(struct sockaddr));[/B]
 
Para mim falta aí uns includes.

Não pus o código todo apenas a parte que têm erros, tenho estes includes:
#include <stdio.h>
#include <winsock.h>
#include <string.h>
#include <time.h>
#include <conio.h>

Bem antes de mais axo que te falta ai uns {} no struct nao???

Nesta parte do socket baseei-me neste tutorial, onde está praticamente como no meu código.
Se o problema fosse esses {}, compilando em C++ também daria erro ou não?


É que pelos erros parece que é falta de libs mas tenho as mesmas que ao compilar em c++...
 
Pelo tipo de erros que dá eu acho que as variaveis nao foram é inicializadas, ve se o nome com que inicializavas é igual ao que usas no resto do codigo =)
 
Pois, não foram inicializadas porque a lib necessária não foi "linkada".

E excepto o s, mais nenhuma daquelas variáveis é utilizada fora do código que pus acima.
 
Depois de muito procurar lá encontrei código do Socket que compila em C.

Código:
    struct hostent *remoteHost = gethostbyname( SERVIDOR );
    struct sockaddr_in addr;    
    addr.sin_addr.s_addr = *(u_long *) remoteHost -> h_addr_list[0];
    addr.sin_family = AF_INET;
    addr.sin_port = htons( PORTA );

Obrigado
 
Back
Topo