[WinSocket] Errore inizializzazione

di il
6 risposte

[WinSocket] Errore inizializzazione

Devo consegnare per novembre un sistema di controllo periodico delle modifiche effettuate al file system e di notifica
a client registrati delle modifiche stesse in C, portabile sia su Win che Unix.
I problemi più grandi sono su Win dato che non ci ho mai programmato in C.

Questa è la fase di inizializzazione di una socket:

#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib") //dice al linked di utilizzare la libreria ws2_32.lib

int create_win_socket()
{
	WSADATA wsa;

	printf("Inizializzazione...");

	    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
	    {
	        printf("Failed. Error Code : %d",WSAGetLastError());
	        return 1;
	    }

	printf("Inizializzata.");

	return 0;
}
Il mio problema è che non mi linka la libreria con la dichiarazione #pragma comment.
Per compilare sto utilizzando MinGW. Posso linkare la libreria in qualche altro modo?

Grazie e buona giornata.

6 Risposte

  • Re: [WinSocket] Errore inizializzazione

    Quella pragma funziona in ambiente Visual C...

    Con quale strumento di sviluppo lavori?
  • Re: [WinSocket] Errore inizializzazione

    Eclipse. Ho utilizzato il caricamento dinamico di una funzione di una dll. E' funzionante ma di certo non posso farlo per tutte le funzioni che mi serviranno. Devo includerla definitivamente.
    
    typedef int (*MyFunc) (WORD w, LPWSADATA l);
    
    	MyFunc func;
    	HMODULE libHandle;
    
    	libHandle = LoadLibrary("ws2_32.dll");
    
    	if(libHandle == NULL) printf("Errore caricamento libreria");
    
    	func = (MyFunc)GetProcAddress( libHandle, "WSAStartup");
    
    	if(func != NULL) func(MAKEWORD(2,2),&wsa);
    	else printf("ERRORE\n");
    
    PS: è un progettino universitario.
  • Re: [WinSocket] Errore inizializzazione

    Francemente mi sembri davvero fuori strada, per un programma portabile
  • Re: [WinSocket] Errore inizializzazione

    Ho deciso che come strategia implementativa utilizzerò delle funzioni wrapper che conterranno l'implementazione sia Unix che Windows in base all'OS esegue il codice giusto. Consigli in merito? E' troppo ridondante?

    Ancora sto in alto mare e mi servirebbe solo come linkare questa libreria per utilizzare le socket in windows, altrimenti non vado avanti.
    Potrei anche linkarla durante la compilazione.
  • Re: [WinSocket] Errore inizializzazione

    Così a occhio e croce ti stai rifacendo al primo risultato google
    http://www.binarytides.com/winsock-socket-programming-tutorial/

    sbaglio?
  • Re: [WinSocket] Errore inizializzazione

    Si. Counque risolvo usando il buon Emacs e linkando la libreria in fase di compilazione:
    
    gcc -c WinSocket.c -o WinSocket -lws2_32
    
    Un altro dubbio. Per la compilazione su Unix posso benissimo utilizzare il Makefile, mentre su Windows utilizzerò uno script batch?
Devi accedere o registrarti per scrivere nel forum
6 risposte