Tengo un código que llama a recv()
periódicamente (con un indicador MSG_DONTWAIT
). Tengo curiosidad porque el perfil de mi código en vtune, veo una llamada sigprocmask()
asociada con el recv()
, y está tomando una gran parte del tiempo total para ejecutar. Tengo curiosidad por qué recv()
está llamando sigprocmask()
.¿Por qué se llama sigprocmask al llamar a la llamada al sistema recv?
6
A
Respuesta
0
Probablemente tan recv puede decir si se generan señales relevantes que de otro modo no se verían si dichas señales se bloquearan. EAGAIN/EWOULDBLOCK vienen a la mente como valores de errno que a veces se generan usando señales que posiblemente podrían bloquearse. ¿Miraste el sigprocmask
man page?
1
Al trabajar con socket TCP en Linux, recibirá SIGPIPE si el otro lado se cierra inesperadamente.
Dado que puede enmascarar esta señal (la mayoría de las veces, manejará el valor de retorno de 0 usted mismo, esta señal no le importa), I supongo la biblioteca del sistema verifica el estado de la señal, y si está enmascarado, use una ruta de código más rápida.
De lo contrario, no se puede optimizar.
Por cierto, usted sabe acerca de pselect() ¿no?
Cuestiones relacionadas
- 1. ¿Por qué es $? siempre 0 después de llamar al sistema()?
- 2. Usando la llamada al sistema open()
- 3. Llamada al sistema Unix fork() ¿qué se ejecuta cuando?
- 4. Llamada al sistema vs Llamada a la función
- 5. cellForRowAtIndexPath no se llama a veces después de llamar a numberOfRowsInSection al llamar a reloadData
- 6. ¿Por qué se llama al constructor predeterminado en herencia virtual?
- 7. ¿Cómo se implementa la llamada al sistema en Linux?
- 8. Ignorando una llamada al sistema
- 9. Capturar/bloquear SIGINT durante la llamada al sistema
- 10. ¿Por qué se llama al constructor una sola vez?
- 11. ¿Por qué se llama varias veces al constructor HttpApplication?
- 12. La llamada al sistema en Ruby
- 13. ¿Por qué se llama al ContentObserver varias veces?
- 14. JNI se bloquea al llamar a CallVoidMethod
- 15. ¿Por qué haskell enumerador basado en IO llama a sigprocmask con tanta frecuencia?
- 16. ¿Llamada al sistema sin cambio de contexto?
- 17. Llamada al sistema e interruptor de contexto
- 18. Dirección incorrecta al agregar una llamada al sistema
- 19. Seleccionar() llamada al sistema en hilos?
- 20. ¿Por qué no se llama a cancelCellEditing() al presionar escape mientras se edita una celda JTable?
- 21. Se llama al destructor automáticamente
- 22. ¿Por qué no se llama al destructor para el objeto devuelto de la función?
- 23. Cómo untaint llamada al sistema en CGI.pm
- 24. ¿Cuándo se llama al constructor?
- 25. Llamar al símbolo del sistema y dejar la ventana abierta
- 26. ¿Llamar al sistema operativo para abrir la url?
- 27. Instalación del paquete mediante la llamada al sistema CLI/Ruby
- 28. ¿Por qué no se llama a Application.OnStartup?
- 29. Suprimir la consola al llamar "sistema" en C++
- 30. ¿Por qué el operador de asignación llama al constructor?
¿Podemos ver un rastro relevante del código más pequeño posible que reproduzca este comportamiento? ¿Podemos ver ese código de demostración también? Sería esclarecedor ver exactamente qué se está haciendo con la máscara de señal. – pilcrow
¿Podría explicar el contexto de esas llamadas a 'recv()'? ¿Qué tipo de socket estás usando? ¿Estás llamando 'recv()' directamente? – alk