[Réseau] [socket] create + bind + file descriptor
Bonjour à tous,
Voilà, sous linux je dispose d'une programme permettant de lire en temps réel des fichier .ts (transport stream) sur une sortie vidéo. Pour l'instant mon programme ne lit que des fichiers sur le disque.
Je souhaiterais qu'il puisse lire les donnees non pas depuis un fichier .ts mais a partir d'un port sur l'ordinateur (les donnees sont envoyees par le réseau). Pour cela j'utilise un socket, et j'ai quelques soucis avec...
Mon problème est que la fonction "bind" de mon socket renvoit -1, signifiant que le bind n'a pas fonctionné correctement.
Voici le code de la fonction responsable de la creation (+bind) de la socket :
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
|
int createSocketTSReader ( void ) {
printf ( "creation du socket \n\r" ) ;
// creation d'un socket
int sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock < 0) {
printf ( "Erreur a la creation du socket %d... \n\r", sock ) ;
return -1 ;
}
// informations sur l'hote distant
struct sockaddr_in dest = { AF_INET } ;
// memset ( &dest, 0, sizeof ( struct sockaddr_in ) ) ;
// dest.sin_family = AF_INET ;
// dest.sin_addr.s_addr = inet_addr ( "127.0.0.1" ) ;
dest.sin_port = htons ( 1234 ) ;
// association de l'adresse de l'hote avec le socket nouvellement cree
int res = bind(sock, (struct sockaddr *)&dest, sizeof dest);
if (res != 0) {
printf ( " Erreur au 'bind' du socket %d... \n\r", res ) ;
return -2 ;
}
printf ( "Socket cree et correctement associe a l'hote distant \n\r" ) ;
// reception des donnees en provenances du socket
char buf[1500];
printf ( "reception des donnees du socket \n\r " ) ;
recv(sock, buf, sizeof buf, 0);
printf ( "fin du socket \n\r" ) ;
return sock ;
} |
J'ai déjà regardé les tutos sur les sockets, mais je ne suis pas un pro et c'est la première fois que j'en implémente. Si quelqu'un a une idée ...
Egalement, je voudrais savoir comment peut-on considérer le descripteur de fichier renvoyé lors de la création du socket (par la fonction "socket") ? En fait mon code lit des fichiers vidéos .ts a partir d'un argument lors de son appel (ouverture avec la fonction fopen), pourrait-il lire les donnees a partir du descripteur de fichier renvoyé par ce socket ? (avec la fonction fdopen par exemple) ?
Merci à tous pour votre aide
D.R.