Như bạn đã biết sendmsg có tuyên bố này:Cách sendmsg hoạt động?
int sendmsg(int s, const struct msghdr *msg, int flags);
và msghdr cấu trúc có dạng như sau:
struct msghdr {
void * msg_name; /* optional address */
socklen_t msg_namelen; /* size of address */
struct iovec * msg_iov; /* scatter/gather array */
size_t msg_iovlen; /* # elements in msg_iov */
void * msg_control; /* ancillary data, see below */
socklen_t msg_controllen; /* ancillary data buffer len */
int msg_flags; /* flags on received message */
};
Như bạn thấy msghdr có một loạt các bộ đệm, iovec và có bộ đệm msg_iovlen. Những gì tôi tự hỏi là làm thế nào sendmsg gửi các bộ đệm. Nó có nối tất cả các bộ đệm và gửi hay gửi nó trong vòng lặp for?
Chỉ cần lưu ý: nếu điều này là dành cho sự tò mò, sau đó làm mát. Nếu bạn đang cố gắng viết cái gì đó phụ thuộc vào kiến thức này, thì bạn gần như chắc chắn làm điều đó sai và yêu cầu rắc rối. –
@SanJacinto nó sẽ hữu ích cho bạn để xây dựng trên ** lý do tại sao ** viết một cái gì đó mà phụ thuộc vào kiến thức này là yêu cầu cho sự cố. Bạn có thể xây dựng được không? –
@lori Vì tài liệu cung cấp cho bạn một bộ giao diện mã và cho bạn biết những gì mong đợi từ chúng. Các giao diện rất chậm để thay đổi. Mã cơ bản không có bảo đảm như vậy. Nếu bạn đang thu thập kiến thức về nội bộ và viết mã của bạn xung quanh kiến thức đó, thì bạn không nên ngạc nhiên nếu bạn cập nhật hạt nhân hoặc một số trình điều khiển trên ngăn xếp mạng và mã của bạn gọi nó không hoạt động nữa. Bạn đã thực hiện một sự lựa chọn tồi nếu bạn đã làm điều này. –