salve a tutti ho un problema su questo codice eseguito dal client....
nel terminale mi da un errore sulla getsockname.
potreste aiutarmi?
codice:
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
//NUMERO DI PORT SUL QUALE IL CLIENT CHIEDE LA CONNESSIONE
#define PORT 4000
//FUNZIONE PER INIZIALIZZARE GLI INDIRIZZI
void addr_initialize(struct sockaddr_in *indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
// htons: host to network conversion, short//
indirizzo->sin_port = htons((u_short)port);
indirizzo->sin_addr.s_addr = IPaddr;
}
// PROGRAMMA PRINCIPALE
void main(int argc,char*argv[])
{
//Descrittore del socket
int sd;
//indirizzo del client
struct sockaddr_in mio_addr;
//indirizzo del server
struct sockaddr_in server_addr;
//Dimensione dell'indirizzo client
int mio_addr_len = sizeof(mio_addr);
//Controllo per la connessione
int error;
//inizializza indirizzo server
addr_initialize(&server_addr , PORT, inet_addr(argv[1]));
//Crea l identificatore del socket
sd = socket(AF_INET,SOCK_STREAM,0);
// crea una connessione sul socket appena creato
error = connect(sd,(struct sockaddr*)&server_addr, sizeof(server_addr));
// controllo se la connect() e andata a buon fine
if(error==0)
{
// se la connessione ha avuto successo stampa su schermo connessione eseguita
printf("\nHo eseguito la connessione con successo\n");
// scrive nell'indirizzo in mio_addr l'indirizzo del client tramite getsockname
getsockname(sd,&mio_addr, &mio_addr_len);
// stampa a video il port del client dopo averlo convertito dal formato rete al
// formato host tramite ntohs()
printf("\nPorta numero: %d\n",ntohs(mio_addr.sin_port));
//chiude il socket
close(sd);
}
else {
printf("%s","\nErrore di connessione\n\n");
// se la connessione non è andata a buon fine chiudo il socket
close(sd);
}
}//main