Tôi đang tạo một chương trình tạo ổ cắm RAW để đọc tất cả lưu lượng truy cập. Giữa cuộc gọi của socket() và recvfrom() (cuối cùng là trong một vòng lặp để lấy ra tất cả các gói từ bộ đệm) tôi chờ 5s.Tại sao thay đổi giá trị của SO_RCVBUF không hoạt động?
Khi tôi chạy chương trình, tôi gửi khoảng 200 gói có lệnh hping3 trong «chế độ nhanh hơn» (để điền nhanh bộ đệm) vào chương trình của tôi. Ngay sau khi 5s được trôi qua, chương trình của tôi trích xuất khoảng 150 gói từ bộ đệm.
Tôi cố gắng để thay đổi kích thước của bộ đệm nhận để có được kết quả tốt hơn:
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
Tuy nhiên, bất cứ điều gì là giá trị của «một», 1 hoặc 10000000, có vẻ như không có gì thay đổi, tôi vẫn nhận được ~ 150 gói từ bộ đệm.
Sự cố là gì?
Chỉnh sửa: Giá trị của «a» được xác minh bằng cuộc gọi getsockopt
.
Bạn có thể hiển thị thêm mã cho chúng tôi, bao gồm cả các lệnh gọi có liên quan đến 'socket()' vv không? Cho chúng tôi biết hệ điều hành của bạn cũng có thể giúp bạn. –
Chắc chắn, tôi chạy chương trình này dưới Linux 3.2 64bits. Cuộc gọi đến 'socket()': 'sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP)' – Flow