Un peu d'éclaircissement sur la fonction socket()
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)
Code:
int socket(int domain, int type, int protocol);
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.
main.c
Code:
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.h
Code:
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 |
sockets.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
| #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
}
} |
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:
sock = socket(1, 1, 0);
ça me faciliterai GRANDEMENT la tache...
Voila la sortie du compilo :
Code:
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 ===| |
Voila je vous remercie donc d'avance :)