Newsgroup: it.comp.lang.c
Titolo: Winsock2:Errore in compilazione

Ciao a tutti, sto provando a compilare questo semplice programmino per
la creazione di un client.
Compilo in ambiente windows con MinGW
#include <stdio.h>
#include "winsock2.h"
void main() {
	// Initialize Winsock
	WSADATA wsaData;
	char c[100];
	int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
	if (iResult != NO_ERROR)
		printf("Error at WSAStartup()\n");
	// Create a SOCKET for connecting to server
	SOCKET ConnectSocket;
	ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (ConnectSocket == INVALID_SOCKET) {
		printf("Error at socket(): %ld\n", WSAGetLastError());
		WSACleanup();
		return;
		}
	// The sockaddr_in structure specifies the address family,
	// IP address, and port of the server to be connected to.
	sockaddr_in clientService;
	clientService.sin_family = AF_INET;
	clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
	clientService.sin_port = htons( 27015 );
	// Connect to server.
	printf("Connected to server.\n");
	scanf("%s",c);
	if ( connect( ConnectSocket, (SOCKADDR*) &clientService,
sizeof(clientService) ) == SOCKET_ERROR) {
		printf( "Failed to connect.\n" );
		WSACleanup();
		return;
	}
	send( ConnectSocket, c, strlen(c), 0 );
	printf("ok");
	WSACleanup();
	return;
}
In compilazione ottengo questi errori:
C:\Temp>gcc -c client.c
client.c: In function `main':
client.c:24: `sockaddr_in' undeclared (first use in this function)
client.c:24: (Each undeclared identifier is reported only once
client.c:24: for each function it appears in.)
client.c:24: parse error before "clientService"
client.c:25: `clientService' undeclared (first use in this function)
Come mai non trova la definizione di sockaddr_in? è contenuta in
winsock2 che è incluso a inizio file...qualcuno sa dirmi dove e cosa
sto sbagliando?
Grazie, 
Massi

 #include "winsock2.h"
[cut]
Devi usare:
#include <winsock2.h>

AlterX ha scritto:

Hmmmmm, ho provato....ma non cambia nulla....

 ha scritto nel messaggio
news:1163765784.8...@b28g2000cwb.googlegroups.com...

In winsock2.h
sockaddr_in è una struct quindi devi usare
struct sockaddr_in ...;
Inoltre il main vuole int di ritorno:
int main(void)
--
Giorgio Silvestri
DSP/Embedded/Real Time OS   Software Engineer

Giorgio Silvestri ha scritto:

Esattamente, ora in compilazione funziona, ma ho nuovi problemi nel
creare l'eseguibile, posto l'output di gcc:
C:\Temp>gcc -o client client.o
client.o(.text+0xf1):client.c: undefined reference to `WSAStartup@8'
client.o(.text+0x121):client.c: undefined reference to `socket@12'
client.o(.text+0x13e):client.c: undefined reference to
`WSAGetLastError@0'
client.o(.text+0x154):client.c: undefined reference to `WSACleanup@0'
client.o(.text+0x16f):client.c: undefined reference to `inet_addr@4'
client.o(.text+0x185):client.c: undefined reference to `htons@4'
client.o(.text+0x1a6):client.c: undefined reference to `connect@12'
client.o(.text+0x1c3):client.c: undefined reference to `WSACleanup@0'
client.o(.text+0x226):client.c: undefined reference to `send@16'
client.o(.text+0x26d):client.c: undefined reference to `WSACleanup@0'
Questo credo dipenda dall'inclusione della libreria Ws2_32.lib, ma come
faccio a dirgli di linkarla? in rete ho trovato questa linea di codice:
#pragma comment(lib,"Ws2_32.lib")
ha a che fare? io ho provato ma la situazione non migliora...vi chiedo
ancora un pò di pazienza...

 `WSAGetLastError@0'
Devi semplicemente includerla nel progetto come file o inserisci il suo
nome nella lista delle lib per il linker in proprietą del progetto