version 1.71, 2013/09/26 13:22:10
|
version 1.86, 2015/11/26 11:44:38
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.16 |
RPL/2 (R) version 4.1.24 |
Copyright (C) 1989-2013 Dr. BERTRAND Joël |
Copyright (C) 1989-2015 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 869 instruction_or(struct_processus *s_etat_
|
Line 869 instruction_or(struct_processus *s_etat_
|
================================================================================ |
================================================================================ |
*/ |
*/ |
|
|
|
|
|
static inline logical1 |
|
options_socket(struct_processus *s_etat_processus, |
|
struct_objet *s_objet_resultat, unsigned char *options, |
|
unsigned char *peripherique, int *priorite, |
|
int *buffer_emission, int *buffer_reception, |
|
int *timeout_emission, int *timeout_reception) |
|
{ |
|
int drapeau; |
|
|
|
/* |
|
* Options des sockets |
|
*/ |
|
|
|
drapeau = -1; |
|
|
|
# define WARNING(message) { \ |
|
if ((*s_etat_processus).langue != 'F') \ |
|
printf("+++Warning : %s unavailable on host system\n", message); \ |
|
else \ |
|
printf("+++Attention : %s non disponible sur le système hôte\n", \ |
|
message); } while(0) |
|
|
|
if (options[d_BIND_TO_DEVICE] == 'Y') |
|
{ |
|
# ifdef SO_BINDTODEVICE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)) |
|
.socket, SOL_SOCKET, SO_BINDTODEVICE, peripherique, |
|
(socklen_t) strlen(peripherique)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_BIND_TO_DEVICE; |
|
# else |
|
WARNING("BIND TO DEVICE"); |
|
# endif |
|
} |
|
|
|
if (options[d_BROADCAST] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_BROADCAST, &drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_BROADCAST; |
|
} |
|
|
|
if (options[d_DONT_ROUTE] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_DONTROUTE, &drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_DONT_ROUTE; |
|
} |
|
|
|
if (options[d_KEEP_ALIVE] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_KEEPALIVE, &drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_PRIORITY] == 'Y') |
|
{ |
|
# ifdef SO_PRIORITY |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)) |
|
.socket, SOL_SOCKET, SO_PRIORITY, priorite, |
|
sizeof((*priorite))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_PRIORITY; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).priorite = |
|
(*priorite); |
|
# else |
|
WARNING("PRIORITY"); |
|
# endif |
|
} |
|
|
|
if (options[d_RECEIVE_BUFFER] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_RCVBUF, buffer_reception, |
|
sizeof((*buffer_reception))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_RECEIVE_BUFFER; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).buffer_reception = |
|
(*buffer_reception); |
|
} |
|
|
|
if (options[d_FORCE_RECEIVE_BUFFER] == 'Y') |
|
{ |
|
# ifdef SO_RCVBUFFORCE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)) |
|
.socket, SOL_SOCKET, SO_RCVBUFFORCE, |
|
buffer_reception, sizeof((*buffer_reception))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_FORCE_RECEIVE_BUFFER; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).buffer_reception = |
|
(*buffer_reception); |
|
# else |
|
WARNING("FORCE_RECEIVE_BUFFER"); |
|
# endif |
|
} |
|
|
|
if (options[d_SEND_BUFFER] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_SNDBUF, buffer_emission, |
|
sizeof((*buffer_emission))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_SEND_BUFFER; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).buffer_emission = |
|
(*buffer_emission); |
|
} |
|
|
|
if (options[d_FORCE_SEND_BUFFER] == 'Y') |
|
{ |
|
# ifdef SO_SNDBUFFORCE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)) |
|
.socket, SOL_SOCKET, SO_SNDBUFFORCE, buffer_emission, |
|
sizeof((*buffer_emission))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_FORCE_SEND_BUFFER; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).buffer_emission = |
|
(*buffer_emission); |
|
# else |
|
WARNING("FORCE_SEND_BUFFER"); |
|
# endif |
|
} |
|
|
|
if (options[d_RECEIVING_TIMEOUT] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_RCVTIMEO, |
|
timeout_reception, sizeof((*timeout_reception))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_RECEIVING_TIMEOUT; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).timeout_reception = |
|
(*timeout_reception); |
|
} |
|
|
|
if (options[d_SENDING_TIMEOUT] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_SNDTIMEO, |
|
timeout_emission, sizeof((*timeout_emission))) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_SENDING_TIMEOUT; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).timeout_emission = |
|
(*timeout_emission); |
|
} |
|
|
|
if (options[d_REUSE_ADDRESS] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat).objet)).socket, |
|
SOL_SOCKET, SO_REUSEADDR, &drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
|
|
(*((struct_socket *) (*s_objet_resultat).objet)).options |= |
|
((integer8) 1) << d_REUSE_ADDRESS; |
|
} |
|
|
|
return(d_absence_erreur); |
|
# undef WARNING |
|
} |
|
|
|
|
void |
void |
instruction_open(struct_processus *s_etat_processus) |
instruction_open(struct_processus *s_etat_processus) |
{ |
{ |
Line 905 instruction_open(struct_processus *s_eta
|
Line 1136 instruction_open(struct_processus *s_eta
|
|
|
int buffer_emission; |
int buffer_emission; |
int buffer_reception; |
int buffer_reception; |
int drapeau; |
|
int priorite; |
int priorite; |
int prochain_descripteur; |
int prochain_descripteur; |
int protocole_numerique; |
int protocole_numerique; |
Line 976 instruction_open(struct_processus *s_eta
|
Line 1206 instruction_open(struct_processus *s_eta
|
unsigned long nombre_elements; |
unsigned long nombre_elements; |
unsigned long unite; |
unsigned long unite; |
|
|
# define d_BIND_TO_DEVICE 0 |
|
# define d_BROADCAST 1 |
|
# define d_DONT_ROUTE 2 |
|
# define d_KEEP_ALIVE 3 |
|
# define d_PRIORITY 4 |
|
# define d_RECEIVE_BUFFER 5 |
|
# define d_FORCE_RECEIVE_BUFFER 6 |
|
# define d_SEND_BUFFER 7 |
|
# define d_FORCE_SEND_BUFFER 8 |
|
# define d_RECEIVING_TIMEOUT 9 |
|
# define d_SENDING_TIMEOUT 10 |
|
# define d_REUSE_ADDRESS 11 |
|
|
|
/* |
/* |
* Argument : { "ouverture" "accès" "format" [ { "nom" } 'protection' ] } |
* Argument : { "ouverture" "accès" "format" [ { "nom" } 'protection' ] } |
*/ |
*/ |
Line 1028 instruction_open(struct_processus *s_eta
|
Line 1245 instruction_open(struct_processus *s_eta
|
"\"file name\" } \"protection\" } OPEN\n"); |
"\"file name\" } \"protection\" } OPEN\n"); |
printf(" { \"filetype\" \"access\" \"format\" { \"name\" " |
printf(" { \"filetype\" \"access\" \"format\" { \"name\" " |
"\"file name\" } \n" |
"\"file name\" } \n" |
" { \"stty\" { \"stty parameters\" ... } } } OPEN\n"); |
" { \"stty\" \"speed,bits,parity,stop\"\n" |
|
" { \"stty parameters\" ... } } } OPEN\n"); |
printf(" { \"sockettype\" { \"name\" \"local name\" } } OPEN\n"); |
printf(" { \"sockettype\" { \"name\" \"local name\" } } OPEN\n"); |
printf(" { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n"); |
printf(" { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n"); |
printf(" \"/semaphore\" OPEN\n\n"); |
printf(" \"/semaphore\" OPEN\n\n"); |
Line 1078 instruction_open(struct_processus *s_eta
|
Line 1296 instruction_open(struct_processus *s_eta
|
printf(" { \"STREAM\" \"READWRITE\" } OPEN\n"); |
printf(" { \"STREAM\" \"READWRITE\" } OPEN\n"); |
printf(" { \"FOREIGN\" \"DATAGRAM\" } OPEN\n"); |
printf(" { \"FOREIGN\" \"DATAGRAM\" } OPEN\n"); |
printf(" { \"LOCAL\" { \"NAME\" \"socket.sock\" } } OPEN\n"); |
printf(" { \"LOCAL\" { \"NAME\" \"socket.sock\" } } OPEN\n"); |
printf(" { { \"NAME\" \"/dev/ttyS1\" } { \"STTY\" { \"9600,8,N,1\" " |
printf(" { { \"NAME\" \"/dev/ttyS1\" } { \"STTY\" \"9600,8,N,1\" " |
"\n \"NO ICANON\" \"IGNBRK\" } } } OPEN\n"); |
"\n { \"NO ICANON\" \"IGNBRK\" } } } OPEN\n"); |
|
|
return; |
return; |
} |
} |
Line 1139 instruction_open(struct_processus *s_eta
|
Line 1357 instruction_open(struct_processus *s_eta
|
buffer_reception = 0; |
buffer_reception = 0; |
timeout_emission = 0; |
timeout_emission = 0; |
timeout_reception = 0; |
timeout_reception = 0; |
drapeau = -1; |
|
s_parametres_tty = NULL; |
s_parametres_tty = NULL; |
|
|
for(i = 0; i < 12; options[i++] = 'N'); |
for(i = 0; i < 12; options[i++] = 'N'); |
Line 1148 instruction_open(struct_processus *s_eta
|
Line 1365 instruction_open(struct_processus *s_eta
|
{ |
{ |
if ((*(*l_element_courant).donnee).type == CHN) |
if ((*(*l_element_courant).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule((unsigned char *) |
if ((argument_majuscule = conversion_majuscule(s_etat_processus, |
(*(*l_element_courant).donnee).objet)) == NULL) |
(unsigned char *) (*(*l_element_courant).donnee).objet)) |
|
== NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_allocation_memoire; |
d_es_allocation_memoire; |
Line 1763 instruction_open(struct_processus *s_eta
|
Line 1981 instruction_open(struct_processus *s_eta
|
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 1829 instruction_open(struct_processus *s_eta
|
Line 2047 instruction_open(struct_processus *s_eta
|
free(argument_majuscule); |
free(argument_majuscule); |
|
|
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 2143 instruction_open(struct_processus *s_eta
|
Line 2361 instruction_open(struct_processus *s_eta
|
{ |
{ |
type_arguments = 'S'; |
type_arguments = 'S'; |
} |
} |
else if (type_arguments == 'F') |
|
{ |
{ |
liberation(s_etat_processus, |
liberation(s_etat_processus, |
s_objet_argument); |
s_objet_argument); |
Line 2320 instruction_open(struct_processus *s_eta
|
Line 2537 instruction_open(struct_processus *s_eta
|
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
if ((*(*l_element_courant_sous_objet).donnee).type == CHN) |
{ |
{ |
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 2361 instruction_open(struct_processus *s_eta
|
Line 2578 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((argument_majuscule = conversion_majuscule( |
if ((argument_majuscule = conversion_majuscule( |
(unsigned char *) |
s_etat_processus, (unsigned char *) |
(*(*l_element_courant_sous_objet) |
(*(*l_element_courant_sous_objet) |
.donnee).objet)) == NULL) |
.donnee).objet)) == NULL) |
{ |
{ |
Line 3622 instruction_open(struct_processus *s_eta
|
Line 3839 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((parametre_courant_majuscule = conversion_majuscule( |
if ((parametre_courant_majuscule = conversion_majuscule( |
(*(*parametre_courant).donnee).objet)) == NULL) |
s_etat_processus, (*(*parametre_courant).donnee).objet)) |
|
== NULL) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 3659 instruction_open(struct_processus *s_eta
|
Line 3877 instruction_open(struct_processus *s_eta
|
// Vitesse |
// Vitesse |
|
|
unsigned char *vitesses[] = |
unsigned char *vitesses[] = |
{ "0", "50", "75", "110", "134", "150", |
{ "50", "75", "110", "134", "150", |
"200", "300", "600", "1200", "1800", "2400", |
"200", "300", "600", "1200", "1800", "2400", |
"4800", "9600", "19200", "38400", |
"4800", "9600", "19200", "38400", |
#ifdef B57600 |
#ifdef B57600 |
Line 3673 instruction_open(struct_processus *s_eta
|
Line 3891 instruction_open(struct_processus *s_eta
|
#endif |
#endif |
NULL }; |
NULL }; |
tcflag_t vitesses_constantes[] = |
tcflag_t vitesses_constantes[] = |
{ B0, B50, B75, B110, B134, B150, B200, B300, B600, |
{ B50, B75, B110, B134, B150, B200, B300, B600, |
B1200, B1800, B2400, B4800, B9600, B19200, B38400, |
B1200, B1800, B2400, B4800, B9600, B19200, B38400, |
#ifdef B57600 |
#ifdef B57600 |
B57600, |
B57600, |
Line 3936 instruction_open(struct_processus *s_eta
|
Line 4154 instruction_open(struct_processus *s_eta
|
} |
} |
|
|
if ((parametre_courant_majuscule = conversion_majuscule( |
if ((parametre_courant_majuscule = conversion_majuscule( |
(*(*parametre_courant).donnee).objet)) == NULL) |
s_etat_processus, (*(*parametre_courant).donnee) |
|
.objet)) == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_allocation_memoire; |
d_es_allocation_memoire; |
Line 4379 instruction_open(struct_processus *s_eta
|
Line 4598 instruction_open(struct_processus *s_eta
|
* Traitement des sockets |
* Traitement des sockets |
*/ |
*/ |
|
|
|
|
inline logical1 options_socket() |
|
{ |
|
/* |
|
* Options des sockets |
|
*/ |
|
|
|
# define WARNING(message) \ |
|
if ((*s_etat_processus).langue != 'F') \ |
|
printf("+++Warning : %s unavailable on host system\n", \ |
|
message); \ |
|
else \ |
|
printf("+++Attention : %s non disponible sur le système " \ |
|
"hôte\n", message) |
|
|
|
if (options[d_BIND_TO_DEVICE] == 'Y') |
|
{ |
|
# ifdef SO_BINDTODEVICE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_BINDTODEVICE, |
|
peripherique, (socklen_t) strlen(peripherique)) |
|
!= 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
# else |
|
WARNING("BIND TO DEVICE"); |
|
# endif |
|
} |
|
|
|
if (options[d_BROADCAST] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_BROADCAST, |
|
&drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_DONT_ROUTE] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_DONTROUTE, |
|
&drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_KEEP_ALIVE] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_KEEPALIVE, |
|
&drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_PRIORITY] == 'Y') |
|
{ |
|
# ifdef SO_PRIORITY |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_PRIORITY, |
|
&priorite, sizeof(priorite)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
# else |
|
WARNING("PRIORITY"); |
|
# endif |
|
} |
|
|
|
if (options[d_RECEIVE_BUFFER] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_RCVBUF, |
|
&buffer_reception, sizeof(buffer_reception)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_FORCE_RECEIVE_BUFFER] == 'Y') |
|
{ |
|
# ifdef SO_RCVBUFFORCE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_RCVBUFFORCE, |
|
&buffer_reception, sizeof(buffer_reception)) |
|
!= 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
# else |
|
WARNING("FORCE_RECEIVE_BUFFER"); |
|
# endif |
|
} |
|
|
|
if (options[d_SEND_BUFFER] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_SNDBUF, |
|
&buffer_emission, sizeof(buffer_emission)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_FORCE_SEND_BUFFER] == 'Y') |
|
{ |
|
# ifdef SO_SNDBUFFORCE |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_SNDBUFFORCE, |
|
&buffer_emission, sizeof(buffer_emission)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
# else |
|
WARNING("FORCE_SEND_BUFFER"); |
|
# endif |
|
} |
|
|
|
if (options[d_RECEIVING_TIMEOUT] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_RCVTIMEO, |
|
&timeout_reception, sizeof(timeout_reception)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_SENDING_TIMEOUT] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_SNDTIMEO, |
|
&timeout_emission, sizeof(timeout_emission)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
if (options[d_REUSE_ADDRESS] == 'Y') |
|
{ |
|
if (setsockopt((*((struct_socket *) (*s_objet_resultat) |
|
.objet)).socket, SOL_SOCKET, SO_REUSEADDR, |
|
&drapeau, sizeof(drapeau)) != 0) |
|
{ |
|
liberation(s_etat_processus, s_objet_argument); |
|
liberation(s_etat_processus, s_objet_resultat); |
|
|
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_parametre_fichier; |
|
return(d_erreur); |
|
} |
|
} |
|
|
|
return(d_absence_erreur); |
|
#undef WARNING |
|
} |
|
|
|
/* |
/* |
* Vérification de la cohérence des arguments et traitement |
* Vérification de la cohérence des arguments et traitement |
* des valeurs par défaut. |
* des valeurs par défaut. |
Line 4873 instruction_open(struct_processus *s_eta
|
Line 4875 instruction_open(struct_processus *s_eta
|
= 'Y'; |
= 'Y'; |
(*((struct_socket *) (*s_objet_resultat).objet)).socket_connectee |
(*((struct_socket *) (*s_objet_resultat).objet)).socket_connectee |
= d_faux; |
= d_faux; |
|
(*((struct_socket *) (*s_objet_resultat).objet)).options = 0; |
|
|
if (type_domaine == 'L') |
if (type_domaine == 'L') |
{ // Socket serveur |
{ // Socket serveur |
Line 4912 instruction_open(struct_processus *s_eta
|
Line 4915 instruction_open(struct_processus *s_eta
|
strncpy(socket_unix.sun_path, pointeur, UNIX_PATH_MAX); |
strncpy(socket_unix.sun_path, pointeur, UNIX_PATH_MAX); |
socket_unix.sun_path[UNIX_PATH_MAX - 1] = d_code_fin_chaine; |
socket_unix.sun_path[UNIX_PATH_MAX - 1] = d_code_fin_chaine; |
|
|
if (options_socket() == d_erreur) |
if (options_socket(s_etat_processus, s_objet_resultat, |
|
options, peripherique, &priorite, |
|
&buffer_emission, &buffer_reception, |
|
&timeout_emission, &timeout_reception) == d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 5016 instruction_open(struct_processus *s_eta
|
Line 5022 instruction_open(struct_processus *s_eta
|
(*resolution_courante).ai_addr)) |
(*resolution_courante).ai_addr)) |
.sin_addr.s_addr; |
.sin_addr.s_addr; |
|
|
if (options_socket() == d_erreur) |
if (options_socket(s_etat_processus, |
|
s_objet_resultat, |
|
options, peripherique, &priorite, |
|
&buffer_emission, &buffer_reception, |
|
&timeout_emission, &timeout_reception) |
|
== d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 5123 instruction_open(struct_processus *s_eta
|
Line 5134 instruction_open(struct_processus *s_eta
|
(*resolution_courante).ai_addr)) |
(*resolution_courante).ai_addr)) |
.sin6_addr.s6_addr[i], i++); |
.sin6_addr.s6_addr[i], i++); |
|
|
if (options_socket() == d_erreur) |
if (options_socket(s_etat_processus, |
|
s_objet_resultat, |
|
options, peripherique, &priorite, |
|
&buffer_emission, &buffer_reception, |
|
&timeout_emission, &timeout_reception) |
|
== d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 5259 instruction_open(struct_processus *s_eta
|
Line 5275 instruction_open(struct_processus *s_eta
|
|
|
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
socket_ipv4.sin_addr.s_addr = htonl(adresse_ipv4); |
|
|
if (options_socket() == d_erreur) |
if (options_socket(s_etat_processus, |
|
s_objet_resultat, |
|
options, peripherique, &priorite, |
|
&buffer_emission, &buffer_reception, |
|
&timeout_emission, &timeout_reception) |
|
== d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |
Line 5336 instruction_open(struct_processus *s_eta
|
Line 5357 instruction_open(struct_processus *s_eta
|
socket_ipv6.sin6_addr.s6_addr[i] = |
socket_ipv6.sin6_addr.s6_addr[i] = |
(unsigned char) (adresse[i]), i++); |
(unsigned char) (adresse[i]), i++); |
|
|
if (options_socket() == d_erreur) |
if (options_socket(s_etat_processus, |
|
s_objet_resultat, |
|
options, peripherique, &priorite, |
|
&buffer_emission, &buffer_reception, |
|
&timeout_emission, &timeout_reception) |
|
== d_erreur) |
{ |
{ |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_argument); |
liberation(s_etat_processus, s_objet_resultat); |
liberation(s_etat_processus, s_objet_resultat); |