2012-11-29 36 views
6

Tôi đã đọc không nên sử dụng nhiều thao tác trên ổ cắm từ các luồng khác nhau. Nhưng nếu tôi gọi từ cùng một socket.async_read và socket.async_write tiếp theo (mà không cần chờ kết thúc trước đó)? Tôi có thể expetct rằng gọi lại thích hợp sẽ chạy khi một trong các hoạt động này được hoàn thành?Boost.asio: tôi có thể thực hiện async_read và async_write cùng một lúc từ một chuỗi không?

+0

bạn có hỏi về ổ cắm TCP không? –

Trả lời

11

Tôi đã tìm thấy có, bạn có thể có một đơn đang chờ xử lý async_read và một đơn đang chờ xử lý async_write trên cùng một ổ cắm mà không có sự cố. Khi bạn gọi phương thức io_service::run(), các cuộc gọi lại sẽ hoàn thành như mong đợi.

Phát hành nhiều async_reads trên cùng một socket hoặc nhiều async_writes trên cùng một socket, có thể dẫn đến hành vi không mong muốn, tùy thuộc vào loại ổ cắm có liên quan. Đặc biệt, việc sử dụng nhiều async_writes trên cùng một ổ cắm TCP có thể dẫn đến dữ liệu xảy ra theo thứ tự khác so với dự kiến ​​ban đầu của bạn và việc trộn lẫn dữ liệu sẽ gửi đi. Trong UDP, nó có thể hợp lý hơn, nhưng tôi vẫn khuyên bạn nên chống lại nó.

Các vấn đề liên quan