POSIX définit l'envoi et la réception comme des opérations atomiques, donc si vous parlez de l'envoi et de la réception POSIX, alors oui, vous pouvez les appeler simultanément à partir de plusieurs threads et les choses fonctionneront.
Cela ne signifie pas nécessairement qu'ils seront exécutés en parallèle. Dans le cas d'envois multiples, le second sera probablement bloqué jusqu'à ce que le premier soit terminé. Vous ne le remarquerez probablement pas, car un envoi se termine une fois que ses données ont été placées dans le tampon de la socket.
Si vous utilisez des sockets SOCK_STREAM, essayer de faire des choses en parallèle a moins de chance d'être utile car send/recv peut envoyer ou recevoir seulement une partie d'un message, ce qui signifie que les choses peuvent être divisées.
Les envois/récupérations bloquants sur les sockets SOCK_STREAM ne bloquent que jusqu'à ce qu'ils envoient ou récupèrent au moins 1 octet, donc la différence entre bloquant et non bloquant n'est pas utile.
4 votes
Pourquoi prétendez-vous que c'est une mauvaise pratique ? Il me semble que tout va bien parce que vous écoutez et recevez de dans des fils différents.