Bonjour, n'étant pas un foudre de guerre en C, je demande donc un peu d'aide ici d'autant plus que je ne pratique pas souvent le C...
SYNOPSIS DU PROBLEME :
Voilà dans le but de me faciliter un peu la tache et surtout à but éducatif, je cherche à me faire une sorte de petite bibliothèque d'abstraction pour les sockets sous linux.
En regardant de plus près dans sys/socket.h j'ai vu que la fonction socket() prend des int comme argument pour le "domaine" (PF_LOCAL ou PF_INET) et pour le type (SOCK_DGRAM ou SOCK_STREAM)
Hors j'aimerai connaitre ces valeurs pour me débloquer dans ma petite fonction perso, ou bien si quelqu'un aurait un suggestion pour résoudre mon problème que je vais exposer ci-dessous après avoir mis les sources.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int socket(int domain, int type, int protocol);
main.c
sockets.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <stdio.h> #include <stdlib.h> #include "sockets.h" #include "sockets.c" int main(int argc, char *argv[]) { int sock; sock = make_sock(2, 2); if(sock == 0) { printf("YES"); } else { printf("BAD"); } return 0; }
sockets.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #ifndef SOCKETS_H_INCLUDED #define SOCKETS_H_INCLUDED int make_sock(int argi, int argj); #endif // SOCKETS_H_INCLUDED
Voila donc dans les switch/case j'essai de renseigner les valeur PF_* et SOCK_*, mais ca ne fonctionne pas, d'un coté comme je l'ai dit le C je pratique peu, ensuite je demandais donc vu que selon socket() c est des int que l'on doit passer si quelqu'un peut m'indiquer ou trouver la reponse, car evidement si pour PF_INET et SOCK_STREAM par exemple je pouvais passer cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <sys/types.h> #include <sys/socket.h> typedef int SOCK; int make_sock(int argi, int argj) { SOCK sock; char type1[8 + 1], type2[11 + 1]; /* LOCAL OR INET? */ switch(argi) { case 1: strcpy(type1, "PF_LOCAL"); break; case 2: strcpy(type1, "PF_INET"); break; } /* DGRAM OR STREAM? */ switch(argj) { case 1: strcpy(type2, "SOCK_DGRAM"); break; case 2: strcpy(type2, "SOCK_STREAM"); break; } sock = socket(type1, type2, 0); if(sock != -1) { return 0; // Socket created successfully } else { return 1; // Socket not created } }
ça me faciliterai GRANDEMENT la tache...
Code : Sélectionner tout - Visualiser dans une fenêtre à part sock = socket(1, 1, 0);
Voila la sortie du compilo :
Voila je vous remercie donc d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 /home/david/Projets/BetaTest/sockets.c||In function make_sock:| /home/david/Projets/BetaTest/sockets.c|27|attention : passing argument 1 of socket makes integer from pointer without a cast| /home/david/Projets/BetaTest/sockets.c|27|attention : passing argument 2 of socket makes integer from pointer without a cast| ||=== Build finished: 2 errors, 0 warnings ===|
Partager