Bonjour,
Je cherches à développer un proxy udp. Pour cela j'utilises une classe HalfProxy qui s'occupe de récupérer le flux sur une interface puis de l'envoyer vers l'autre.
HalfProxy est crée avec en paramètre deux identifiants de socket déjà bindés (l'une sur l'interface locale sur le port server et l'autre sur l'interface publique sur le port client)
A terme le proxy sera composé de deux HalfProxy chacun écoutant sa socket et, lors de la réception d'un message, renvoyant le message à travers la deuxième socket (donc dans le cas ou un message arrive sur l'interface lan, le message sera envoyé par la socket réalisant l'écoute wan).
J'ai quelques petits soucis avec mon code:
Le problème est que lorsque recvfrom à le flag MSG_DONTWAIT, la fonction sendto me retourne -1 et perror() me renvoie: "Resource temporarily unavailable".
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 ... void HalfProxy::listen() { char lBuffer[BUFFER_SZ]; struct sockaddr_storage lClientAddr; socklen_t lClientAddrSize = sizeof(lClientAddr); int lSize; while(_running) { lSize = recvfrom(*_listenSocket, lBuffer, BUFFER_SZ, MSG_DONTWAIT , ( sockaddr *) &lClientAddr, &lClientAddrSize); if(lSize > -1) { char lMessage[lSize]; memcpy(lMessage,lBuffer,lSize); assert(sendMessage(lMessage, lSize)); memset(lMessage,'\0',lSize); memset(lBuffer,'\0',BUFFER_SZ); } } } bool HalfProxy::sendMessage(void* pMessage, int pSize) { socklen_t lSendAddressSize = sizeof(_sendAddress); int lSendSize = sendto(*_sendSocket, pMessage, pSize, 0, (sockaddr *) &_sendAddress, lSendAddressSize); perror("Send "); return lSendSize != -1 ? true : false; } ...
Si je change le flag MSG_DONTWAIT pour le passer à 0, tout fonctionne à merveille.
Je ne comprends pas pourquoi positionner le flag sur un recvfrom sur une socket me pose des problèmes pour envoyer des messages via une autre socket à destination d'une adresse externe.
De plus j'aimerais savoir si l'utilisation que je souhaite faire de mon HalfProxy vous paraît pertinente.
Merci à tous.
Partager