Tôi đang sử dụng chức năng chọn để liên lạc giữa các ổ cắm của tôi. Tôi có vòng lặp while và tôi làm -Tại sao FD_SET/FD_ZERO cho select() bên trong vòng lặp?
while(!done) {
FD_ZERO(&read_flags);
FD_ZERO(&write_flags);
FD_SET(comm_fd1, &read_flags);
FD_SET(comm_fd2, &read_flags);
FD_SET(STDIN_FILENO, &read_flags);
FD_SET(comm_fd1, &write_flags);
FD_SET(comm_fd2, &write_flags);
FD_SET(STDIN_FILENO, &write_flags);
//call select
sel = select(comm_fd1+comm_fd2+1, &read_flags, &write_flags, (fd_set*)0, &waitd);
và giống với các biến khác nhau ở phía máy khách. Tôi đã có kỹ thuật cơ bản này từ một hướng dẫn trực tuyến và chỉ cần đi với nó. Sau đó, nó đánh tôi - tại sao tôi xóa bộ và thêm các bộ mô tả tập tin mỗi khi tôi lặp lại? Nếu họ đã được thêm vào, tại sao xóa chúng và thêm một lần nữa? Vì vậy, tôi đã cố gắng chỉ làm điều này một lần trước khi trong khi, và mã không hoạt động giống nhau nữa. Ai đó có thể giải thích lý do tại sao? Có phải chỉ vì chọn sửa đổi nội dung của bộ này? Bất kỳ trợ giúp và/hoặc thông tin chi tiết nào đều được đánh giá cao.
Cũng lưu ý rằng bạn nên đặt lại cấu trúc timeval (đợi trong ví dụ) mỗi khi bạn lặp lại. –