Parse error before "socklen_t" sous NIOS IDE
Bonjour,
je développe une application à l'aide d'un NIOS sous NIOS IDE et j'ai une erreur de compilation que je n'arrive pas à identifier :
make -s all includes
Compiling server.c...
In file included from ../lan/server.c:21:
../lan/../probe/probe.h:48: error: parse error before "socklen_t"
Voici mon fichier .h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
/* $Id$ */
#ifndef PROBE_H_
#define PROBE_H_
#ifdef __GNUC__
#define PACKED __attribute__((__packed__))
#else
#define PACKED
#endif
/* Paramètres de la sonde */
#define XMITFRAMES_EN 0
#define XMITSTATS_EN 0
#define VERBOSE 0
#define SENDPERIOD 100 /* Envoi toutes les 0.1 millisecondes */
/**
* La tâche MicroC/OS II qui lance la lecture sur le périphérique
* et envoie les trames et stats par UDP
*/
void prog_interface_extraction(void *pdata);
/* ces fonctions permettent la reception et l'émission de trame udp de taille supérieur au MTU, soit 1518 octets */
/* fonctions en cours de développement */
#define dataUDPframe 1472 /* nombre d'octets pour les données utile */
/* UDP splitting header*/
#define UDPH_SIZE 7
struct UDPheader_struct{
char ID_UDPframe;
INT16U UDPframe_size;
INT16U total_packets;
INT16U packet_number;
} PACKED;
struct UDPframe_struct{
struct UDPheader_struct UDPheader;
char *UDPdata;
} PACKED;
int sendtoUDP (int s, const void *message, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
#endif |
Et voici la fonction .c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| int
sendtoUDP (int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
{
int lengthdata_to_send, payload_free;
int i;
ssize_t slen;
struct UDPframe_struct *UDPframe;
char *UDPdata;
/* definition de l'espace disponible pour les données que l'on souhaite transmettre. espace normalement disponible - la taille du header de fragmentation UDP */
payload_free = dataUDPframe - UDPH_SIZE;
/* allocation de l'espace mémoire pour les données à envoyées par la session UDP */
UDPframe = (struct UDPframe_struct *)malloc(sizeof(struct UDPheader_struct) + payload_free);
UDPdata = (char *)&UDPframe->UDPdata;
UDPframe->UDPheader.UDPframe_size = len + UDPH_header;
UDPframe->UDPheader.ID_UDPframe = msg[11]; /* On utilise le dernier octet du timestamp de la trame détectée comme ID de fragmentation */
if(len > payload_free){
if(len % payload_free == 0){
UDPframe->UDPheader.total_packets = len / payload_free; /* len est un multiple du payload */
}
else{
UDPframe->UDPheader.total_packets = 1 + len / payload_free; /* len n'est pas un multiple du payload */
}
}
for (i = 1; i <= UDPframe->UDPheader.total_packets; i ++){
if(len - (i * payload_free) > payload_free){
lengthdata_to_send = payload_free;
}
else{
lengthdata_to_send = len - ((i-1) * payload_free);
}
/* copy des données à envoyées dans la structure de la fragmantation de la trame */
bcopy(msg + ((i-1) * payload_free), UDPdata, lengthdata_to_send);
/* Ecriture du numéro du packet dans l'en-tête de fragmentation */
UDPframe->UDPheader.packet_number = i;
/* Envoi du paquet */
slen=sendto(s, (void *)UDPframe, sizeof(struct UDPheader_struct) + lengthdata_to_send, flags, to, tolen);
return slen;
}
} |
Merci pour les éventuelles réponses.