Mam pewien kod, który wywołuje okresowo recv()
(z flagą MSG_DONTWAIT
). Jestem ciekawy, ponieważ profilowanie mojego kodu w vnune, widzę wywołanie sigprocmask()
powiązane z recv()
i zajmuje ono dużą część całkowitego czasu wykonania. Jestem ciekawy, dlaczego recv()
dzwoni sigprocmask()
.Dlaczego funkcja sigprocmask jest wywoływana podczas wywoływania wywołania systemowego recv?
Odpowiedz
Prawdopodobnie tak recv może stwierdzić, czy generowane są odpowiednie sygnały, które w przeciwnym razie nie byłyby widoczne, gdyby te sygnały były zablokowane. EAGAIN/EWOULDBLOCK przychodzą na myśl jako wartości errno, które czasami są generowane z wykorzystaniem sygnałów, które mogą być blokowane. Czy spojrzałeś na sigprocmask
man page?
Podczas pracy z gniazdem TCP pod Linuksem, otrzymasz SIGPIPE, jeśli druga strona zostanie nieoczekiwanie zamknięta.
Ponieważ możesz maskować ten sygnał (przez większość czasu będziesz obsługiwał wartość zwrotną 0 siebie, nie przejmujesz się tym sygnałem), I domyslna biblioteka systemowa sprawdza stan sygnału, i jeśli jest zamaskowany, użyj szybszej ścieżki kodu.
Jeśli nie, nie może zoptymalizować.
BTW, wiesz o pselect() prawda?
- 1. Funkcja wywołania zwrotnego Asio nie jest wywoływana
- 2. Catching/blocking SIGINT podczas wywołania systemowego
- 3. Korzystanie z wywołania systemowego open()
- 4. Dlaczego wywoływana jest funkcja DialogFragment.onCreateView podczas niszczenia czynności?
- 5. Dlaczego funkcja onResume() jest wywoływana podczas uruchamiania działania?
- 6. Dlaczego funkcja onKey() jest wywoływana dwa razy?
- 7. Dlaczego nie jest wywoływana funkcja textFieldShouldReturn?
- 8. Dlaczego funkcja onBackPressed() nie jest wywoływana?
- 9. Dlaczego funkcja run() jest wywoływana tylko raz?
- 10. Dlaczego ta funkcja operatora grupowania + jest natychmiast wywoływana?
- 11. Dlaczego tak często wywołuje sigprocask wywołania IZ wywołania funkcji Iskell?
- 12. Dlaczego wywoływana jest funkcja wywołania zwrotnego błędu Backbone.js, mimo że Rails rzekomo zwraca odpowiedź powodzenia?
- 13. Dlaczego funkcja __getattribute__ nie jest wywoływana w niejawnym wywołaniu __getitem __?
- 14. błąd podczas wywoływania zdalnego funkcja skalarna wycenione
- 15. Dlaczego wywoływana jest $ HTTP_RAW_POST_DATA?
- 16. Funkcja onStop jest wywoływana przed onStart
- 17. Dlaczego funkcja onResume() jest wywoływana w ukrytych fragmentach?
- 18. Dlaczego funkcja __init__ nie jest wywoływana, jeśli funkcja __new__ została wywołana bez argumentów:
- 19. Dlaczego otrzymuję komunikat "Metoda niestatyczna nie powinna być wywoływana statycznie" podczas wywoływania metody w modelu wymownym?
- 20. Funkcja sukcesu AJAX nie jest wywoływana
- 21. Funkcja onContextItemSelected nie jest wywoływana w DialogFragment
- 22. Kamera onPreviewFrame nie jest wywoływana
- 23. Dlaczego funkcja cancelCellEditing() nie jest wywoływana po naciśnięciu klawisza escape podczas edytowania komórki JTable?
- 24. Dlaczego metoda podklasy nie jest wywoływana?
- 25. Jaka jest prawidłowa składnia Ruby do wywołania systemowego zwijania?
- 26. Funkcja Progu libcURL nie jest wywoływana
- 27. Dlaczego wywoływana jest metoda toString() podczas drukowania obiektu?
- 28. Dlaczego nie jest presentationController: viewControllerForAdaptivePresentationStyle: jest wywoływana?
- 29. JSON Funkcja wywołania błędu wywołania
- 30. Dlaczego farba()/paintComponent() nigdy nie jest wywoływana?
Czy widzimy odpowiedni ślad najmniejszego możliwego kodu, który odtwarza to zachowanie? Czy widzimy też ten kod demo? Byłoby pouczające, aby zobaczyć dokładnie, co robi się z maską sygnału. – pilcrow
Czy mógłbyś rozwinąć kontekst tych wywołań do 'recv()'? Jakiego rodzaju gniazda używasz? Czy nazywasz 'recv()' bezpośrednio? – alk