Tôi có một ứng dụng gửi điểm dữ liệu đến điểm từ người gửi đến người nhận qua một liên kết có thể hoạt động ở chế độ đơn (truyền một chiều) hoặc chế độ song công (hai chiều). Trong chế độ đơn giản, ứng dụng gửi dữ liệu bằng UDP và trong chế độ song công, nó sử dụng TCP. Vì việc ghi trên TCP socket có thể chặn, chúng tôi đang sử dụng Non Blocking IO (ioctl với FIONBIO - O_NONBLOCK và fcntl không được hỗ trợ trên phân phối này) và select() gọi hệ thống để xác định khi nào dữ liệu có thể được ghi. NIO được sử dụng để chúng tôi có thể hủy bỏ việc gửi sớm sau khi hết thời gian chờ nếu cần điều kiện mạng xấu đi. Tôi muốn sử dụng cùng một mã cơ bản để thực hiện việc gửi nhưng thay vào đó thay đổi giữa TCP/UDP ở mức trừu tượng cao hơn. Điều này làm việc tuyệt vời cho TCP.Bản ghi UDP không chặn có ít byte hơn yêu cầu không?
Tuy nhiên tôi lo ngại về cách không chặn IO hoạt động cho ổ cắm UDP. Tôi có thể đọc các trang người đàn ông không chính xác, nhưng kể từ khi write() có thể trả lại cho biết ít byte được gửi hơn yêu cầu, điều đó có nghĩa là một khách hàng sẽ nhận được ít byte hơn trong datagram của nó? Để gửi một bộ đệm dữ liệu nhất định, nhiều ghi có thể cần thiết, có thể là trường hợp kể từ khi tôi đang sử dụng không chặn IO. Tôi lo ngại rằng điều này sẽ chuyển thành nhiều gói dữ liệu UDP mà máy khách nhận được.
Tôi khá mới để lập trình socket nên hãy tha thứ cho tôi nếu có một số quan niệm sai lầm ở đây. Cảm ơn bạn.
Bạn có thể muốn kiểm tra chi tiết cho bất kỳ hệ thống nào bạn đang làm việc cùng; ngăn xếp UDP của bạn có thể có các giới hạn cụ thể (thực sự, như bạn đã nêu). – geekosaur