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
|
int MODBUSTCP_InitLiaisonServeur(char *AdresseIP, USHORT NumPort)
{
int IdSocket;
USHORT TailleAdrSocketServeur;
struct sockaddr_in AdrSocketServeur;
struct timeval TimeOutConnexion;
/* Timeout de connexion */
TimeOutConnexion.tv_sec = 3;
TimeOutConnexion.tv_usec = 0;
/* Creation de la socket (options adaptees pour API) */
if((IdSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
DEBUG_Affichage("MODBUSTCP.c : Erreur creation de la socket");
return(-1);
}
/* Adresse IP et numero de port */
TailleAdrSocketServeur = sizeof(struct sockaddr_in);
memset( &AdrSocketServeur, 0, TailleAdrSocketServeur ); /* Mise a 0 de toute la structure */
AdrSocketServeur.sin_family = AF_INET; /* Rempli la struct avec le type de protocole (TCP) */
AdrSocketServeur.sin_port = htons(NumPort); /* Rempli la struct avec le num du port du serveur */
if (inet_aton(AdresseIP, &(AdrSocketServeur.sin_addr)) == 0) /* Rempli la struct avec l'IP du serveur */
{
DEBUG_Affichage("MODBUSTCP.c : Erreur : mauvais format d'adresse IP");
return(-1);
}
/* Pour fixer un timeout si pas de connexion */
setsockopt(IdSocket, SOL_SOCKET, SO_RCVTIMEO, &TimeOutConnexion, sizeof(TimeOutConnexion));
/* Connection a la socket */
if(connect(IdSocket, (struct sockaddr *) &AdrSocketServeur, sizeof(struct sockaddr_in) ) < 0)
{
/* Fermeture de la socket */
DEBUG_Affichage("MODBUSTCP.c : Erreur lors de la connexion au serveur => fermeture de la socket");
close(IdSocket);
return(-1);
}
return(IdSocket);
} |
Partager