Tôi có một giả thuyết: đôi khi các kết nối TCP đến nhanh hơn máy chủ của tôi accept()
. Họ xếp hàng cho đến khi hàng đợi tràn ra và sau đó có vấn đề.
Làm thế nào tôi có thể xác nhận điều này đang xảy ra?
Tôi có thể theo dõi độ dài của hàng đợi chấp nhận hoặc số lần tràn không? Có một quầy tiếp xúc ở đâu đó?
netstat
chỉ hiển thị độ dài hàng gửi và nhận, không giống với hàng đợi chấp nhận.
man netstat | less +/Flags
netstat
dường như hoàn toàn không hiển thị Flags
cho các kết nối TCP. Từ một thử nghiệm nhỏ, có vẻ như các kết nối được hiển thị như ESTABLISHED
trong netstat
, ngay cả khi tôi thử mở các kết nối đến một quy trình thực hiện listen()
nhưng không bao giờ accept()
.
SYN_RECV
. Không có hàng đợi nào khác ngoài điều đó. Tôi cho rằng hạt nhân có thể được bảo bằng cách nào đó để ghi lại các gói bị rơi do có quá nhiều kết nối nửa mở, nhưng đã hơn 10 năm kể từ khi tôi xem xét kết nối với Linux, vì vậy tôi không biết làm thế nào để làm điều đó. Một lưu ý phụ: bạn không chờ đợi accept()
để thực hiện công việc của mình, bạn đang chờ ACK
s đến từ các máy chủ kết nối để hoàn tất các kết nối.
netstat
.