Như tôi đã hiểu, backlog xác định kích thước của hàng đợi kết nối . Bất kỳ yêu cầu bổ sung nào lớn hơn kích thước này tại thời điểm đó sẽ bị xóa (là statment này phải không?).listen() bỏ qua giá trị tồn đọng
Bây giờ tôi có rất đơn giản chương trình server.c
socket()
bind()
listen(..., 5)
while(1)
{
accept()
read()
write()
sleep(3)
close()
}
Bây giờ, tôi bắt đầu 8 khách hàng tại một thời điểm để kết nối với máy chủ này. Đáng ngạc nhiên, máy chủ phục vụ tất cả 8 khách hàng nhưng thay vào đó nó sẽ xếp hàng chỉ 5 khách hàng & còn lại 3 yêu cầu khách hàng nên bị từ chối. Một điểm thú vị khác là ngay cả khi tôi đặt giá trị tồn đọng này là 0, kết quả vẫn như cũ. Sau đó, tôi đã thử bình luận listen() gọi, với tất cả 8 kết nối khách hàng này bị từ chối.
Ai đó có thể cung cấp bất kỳ đầu vào nào về điều này.
Bạn nên đặt 'read', 'write' và' close' trong một môi trường đồng thời. Trong mã của bạn, khi kết nối tiếp theo là 'accept'ed, có vẻ như kết nối trước đó đã bị đóng.Đặt mã trong một chuỗi và đảm bảo rằng mỗi kết nối đủ dài đủ để đảm bảo tình huống 8 máy khách yêu cầu máy chủ của bạn đồng thời thực sự xảy ra. –
tôi đã được thử nghiệm ** backlog ** đôi khi trở lại và không nhận được bất cứ nơi nào. hy vọng sẽ thấy câu trả lời ngay bây giờ. – tuxuday
OP, bạn có thể đăng mã mẫu của mình không. để mọi người có thể sao chép/dán và kiểm tra nó. – tuxuday