Kiedy gniazdo sygnalizowane jest jako prawidłowe, aby pisać przez połączenie z numerem select()
, w jaki sposób mogę sprawdzić, ile danych mogę wysyłać bez blokowania? (W przypadku buforów pełnego wysyłania itp.)Czy send() kiedykolwiek blokuje podczas używania select()?
Czy uwzględnienie w zestawie zwróconym przez select()
oznacza, że gniazdo jest gotowe na co najmniej jeden bajt danych, a następnie zwróci krótką liczbę zapisanych bajtów?
A może będzie blokować, gdy zadzwonię pod numer send()
z parametrem len
, który jest większy niż dostępny obszar bufora? Jeśli tak, to w jaki sposób mogę poznać maksymalną kwotę?
Używam zwykłych gniazd C w systemie Linux.
Jeśli twoje API obsługuje to, możesz użyć opcji 'SO_SNDLOWAT'. W ten sposób możesz wybrać minimalną liczbę bajtów, które muszą być zapisywalne. – cnicutar