cuốn sách gpt4 ai đã làm

c - 避免 TIME_WAIT

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 12:06:34 29 4
mua khóa gpt4 Nike

Tôi đang cố tránh TIME_WAIT ở phía máy khách. Tôi kết nối rồi đặt O_NONBLOCK và SO_REUSEADDR. Tôi gọi đọc cho đến khi nó trả về 0. Khi đọc trả về 0, errno cũng là 0. Tôi hiểu đây là dấu hiệu cho thấy máy chủ đã đóng kết nối. Tuy nhiên, nếu tôi gọi đóng, ổ cắm được đặt thành TIME_WAIT, điều này được xác nhận bởi netstat.

Vì tôi có nhiều kết nối đến cùng một máy chủ/cổng nên cuối cùng tôi bắt đầu thấy lỗi "địa chỉ đang sử dụng" (xem http://hea-www.harvard.edu/~fine/Tech/addrinuse.html).

Tôi có nên gọi đóng sau khi đọc trả về 0 không? Nếu tôi không làm điều này, bộ mô tả tập tin có được phát hành không?

câu trả lời hay nhất

Bên bắt đầu việc đóng kết nối là người cuối cùng xuất hiện trong TIME_WAIT trạng thái của một trong các bên. read()Trả về 0 có nghĩa là máy chủ đã đóng ổ cắm trước, vì vậy có - điều đó có nghĩa là TIME_WAITCuối cùng ở phía máy chủ, máy khách chuyển LAST_ACK .

Cuối cùng, bạn không thể tránh được TIME_WAITtình trạng. Ngay cả khi bạn di chuyển thành công từ máy khách này sang máy chủ khác, bạn vẫn không thể sử dụng lại (máy chủ máy chủ, cổng máy chủ, máy chủ máy khách, cổng máy khách)tuple cho đến khi TIME_WAITHết rồi (bất kể nó ở bên nào).

Vì ba phần của bộ dữ liệu này được cố định trong kịch bản của bạn (máy chủ lưu trữ,cổng máy chủ,máy chủ khách hàng), bạn thực sự chỉ có các tùy chọn sau:

  • Hãy thử cung cấp nhiều cổng khách hàng hơn. Theo mặc định, một số hệ điều hành chỉ sử dụng một phần nhỏ các cổng có sẵn cho "các cổng phù du" (Tôi không chắc chắn về OSX về vấn đề này). Trong trường hợp này, hãy xem liệu bạn có thể thay đổi phạm vi thông qua chỉnh sửa cấu hình trong hệ điều hành hoặc để ứng dụng sử dụng không ràng buộc() Tìm một cổng làm việc. /kết nối()trong một vòng lặp cho đến khi kết nối ổn.

  • Mở rộng số lượngmáy chủ khách hàngCác giá trị khả dụng là bằng cách sử dụng nhiều địa chỉ IP trên máy khách của bạn. Bạn phải có ứng dụng ràng buộc()Tuy nhiên, cụ thể đối với một trong những địa chỉ IP này.

  • Mở rộng số lượngmáy chủ lưu trữ/cổng máy chủCác giá trị khả dụng là bằng cách sử dụng nhiều cổng và/hoặc địa chỉ IP trên máy chủ. Khách hàng cần chọn kết nối (quay vòng, ngẫu nhiên, v.v.).

  • Có lẽ là tùy chọn tốt nhất, nếu khả thi: cấu trúc lại giao thức của bạn để các kết nối đã hoàn thành không bị đóng mà thay vào đó hãy chuyển sang trạng thái "không hoạt động" để chúng có thể được sử dụng lại sau này, thay vì mở một kết nối mới (chẳng hạn như HTTP keep-alive) .

Về c - tránh TIME_WAIT, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/50517381/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress