Efek dari pengaturan SO_SNDBUF
berbeda untuk TCP dan UDP.
- Untuk UDP, ini menetapkan batas ukuran datagram , yaitu apa pun yang lebih besar akan dibuang.
- Untuk TCP, ini hanya menyetel ukuran buffer dalam kernel untuk soket yang diberikan (dengan beberapa pembulatan ke batas halaman dan dengan batas atas).
Karena sepertinya Anda berbicara tentang TCP, efek yang Anda amati dijelaskan oleh soket yang berada dalam mode pemblokiran , jadi send(2)
blok hingga kernel dapat menerima semua data Anda, dan/atau tumpukan jaringan secara asinkron menghilangkan antrean data dan mendorongnya ke kartu jaringan, sehingga membebaskan ruang dalam buffer.
Selain itu, TCP adalah protokol aliran , itu tidak mempertahankan struktur "pesan" apa pun. Satu send(2)
dapat sesuai dengan beberapa recv(2)
s di sisi lain, dan sebaliknya. Perlakukan itu sebagai byte-stream.
SO_SNDBUF
mengonfigurasi buffer yang digunakan oleh implementasi soket secara internal. Jika soket Anda non-pemblokiran, Anda hanya dapat mengirim hingga ukuran yang dikonfigurasi, jika soket Anda memblokir tidak ada batasan untuk panggilan Anda.