Beh, ma allora come hai scritto il programma?
Quando scrivi
dati=accept(primo,(sockaddr*)&datiadd,LPINT(&lun)) ;
perche' passi il puntatore alla struttura datiadd?
Il secondo parametro della accept e' :
"Optional pointer to a buffer that receives the address of the connecting entity, as known to the communications layer."
Quindi dovrebbe essere qualcosa del genere ...
codice:
char ip[50];
unsigned short port;
inet_ntop(AF_INET, &(((struct sockaddr_in *)datiadd)->sin_addr), ip, sizeof (ip));
port = ntohs(((struct sockaddr_in *)datiadd)->sin_port);
printf("IP %s PORT %hu\n", ip, port);