Tengo un hilo que llama a recvfrom con un tiempo de espera de 100 ms en un bucle. Otro hilo llama sendto periódicamente.
¿La función sendto espera hasta que recvfrom se libera por el tiempo de espera (o una lectura exitosa) o envía los datos durante ese período de tiempo?
¿Las funciones C recvfrom y sendto son mutuamente excluyentes?
No. Ambos pueden ser ejecutados por diferentes subprocesos al mismo tiempo.
sendto() no espera a que recvfrom() lea los datos. Colocaría los datos en el búfer del socket y regresaría. Múltiples sendto() pueden bloquearse para que se complete el anterior sendto() . Si se produjo algún error (búfer lleno, mensaje demasiado grande, etc.) durante el envío, puede verificar inspeccionar errno para verificar la causa de la falla. Básicamente, no necesita realizar ninguna sincronización entre las llamadas sendto() y recvfrom() de los dos subprocesos; son operaciones atómicas.
No, no espera (al menos, no espera más de lo necesario para obtener acceso seguro para subprocesos a la pila de comunicaciones).