Je suis actuellement en train d'exécuter un ancien système sur Tru64 qui implique beaucoup de sockets UDP en utilisant la fonction sendto(). Les sockets sont utilisés dans notre code pour envoyer des messages vers/depuis différents processus, puis éventuellement vers une application cliente connectée à distance. Parfois, le socket du client lourd est bloqué, ce qui peut entraîner l'accumulation de certains de ces messages. Ma question est comment puis-je déterminer la taille de la mémoire tampon actuelle, et comment puis-je déterminer le tampon de message maximale. Le code ci-dessous donne un extrait de comment je configure le port et utilise la fonction sendto.sendto sur Tru64 retourne ENOBUF
/* need to adjust the maximum size we can send on this */
/* as it needs to be able to cope with the biggest */
/* messages we send */
lenlen = sizeof(len) ;
/* allow double for when the system is under load */
int lenlen, len ;
lenlen = sizeof(len) ;
len = 2 * 32000;
msg_socket = socket(AF_UNIX,SOCK_DGRAM, 0);
result = setsockopt(msg_socket, SOL_SOCKET, SO_SNDBUF, (char *)&len, lenlen) ;
result = sendto(msg_socket,
(char *)message,
(int)message_len,
flags,
dest_addr,
addrlen);
Remarque. Nous avons porté cette application sur Linux et le problème ne semble pas apparaître ici.
Toute aide serait grandement appréciée.
Cordialement