Khi tôi gửi()/write() một tin nhắn qua luồng tcp, làm thế nào tôi có thể tìm hiểu xem các byte đó có được gửi thành công không?Tìm hiểu xem tin nhắn trên tcp đã được gửi chưa
Người nhận xác nhận nhận byte qua tcp, do đó, người gửi tcp stack nên biết. Nhưng khi tôi gửi() một số byte, gửi() ngay lập tức trả về, ngay cả khi gói không thể được gửi, tôi đã thử nghiệm trên linux 2.6.30 sử dụng strace trên netcat, kéo cáp mạng của tôi ra trước đó gửi một số byte.
Tôi chỉ đang phát triển một ứng dụng rất quan trọng để biết liệu thư có được gửi hay không, nhưng thực hiện các tính năng tcp ("ack for message # 123") cảm thấy khó xử, phải có cách tốt hơn.
Sự thật là đúng, nhưng tôi không thích cách nói. TCP là một giao thức đáng tin cậy, bạn ** sẽ ** nghe về nó nếu việc truyền tải thất bại. Thực tế là bạn không cần phải yêu cầu một ACK từ phía xa là một tính năng, không phải là một lỗi. Cách "tốt nhất" để giải quyết vấn đề này là ** bỏ qua ** vấn đề ở cấp độ các cuộc gọi và byte hệ thống. Nếu bạn cần một kết quả trở lại, làm điều đó ở cấp độ của giao thức, không phải là ổ cắm. –