Trong khi lặp qua các bộ mô tả tệp socket, làm thế nào tôi có thể kiểm tra xem một trong số đó có phải là từ một ổ cắm thụ động (nghe các kết nối) không?Kiểm tra xem ổ cắm có đang nghe trong C
Trả lời
Điều này có thể được kiểm tra với getsockopt (SO_ACCEPTCONN). Ví dụ:
#include <sys/socket.h>
int val;
socklen_t len = sizeof(val);
if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &val, &len) == -1)
printf("fd %d is not a socket\n", fd);
else if (val)
printf("fd %d is a listening socket\n", fd);
else
printf("fd %d is a non-listening socket\n", fd);
Bạn thực sự không thể biết được. Bạn phải tự theo dõi nó và khi bạn muốn kiểm tra xem ổ cắm có phải là ổ cắm nghe bạn so sánh với ổ cắm bạn đã lưu hay không.
Bạn có thể chạy trong dòng lệnh (trên môi trường Mac/Linux):
lsof -i
và/hoặc (Linux/Mac/Windows môi trường)
netstat -a
Ông yêu cầu một giải pháp C (không phải tôi đã xuống). – peterh
Nói đúng ra, bạn có thể hãy thử thực hiện một thao tác trên ổ cắm để xác định ngẫu nhiên loại ổ cắm nào, như cố gắng chấp nhận một kết nối từ nó. Nếu accept()
thất bại với EINVAL, đó là một dấu hiệu khá tốt mà nó không phải là lắng nghe. :)
Tuy nhiên, việc theo dõi các ổ cắm nào là giải pháp tốt hơn. Trừ khi bạn đang xây dựng một ứng dụng thực sự tầm thường, rất có thể là bạn sẽ cần phải giữ một số loại dữ liệu bổ sung trên mỗi ổ cắm anyway.
- 1. Đóng ổ cắm TCP đang nghe trong C
- 2. kiểm tra xem ổ cắm máy chủ có đang mở ở phía bên kia không
- 3. Ổ cắm nghe không unbind trong C + + theo linux
- 4. Làm cách nào để kiểm tra xem ổ cắm có được đóng trong Boost.Asio không?
- 5. Kiểm tra xem ổ cắm có bị đóng trong bash không?
- 6. Android: Kiểm tra xem tai nghe có được cắm vào số
- 7. Kiểm tra xem đường dẫn có phải là ổ cắm bằng Python 2.7
- 8. Linux: Kiểm tra xem ổ cắm/ống có bị hỏng mà không đọc()/write()
- 9. Làm cách nào để kiểm tra xem ổ cắm có được kết nối không?
- 10. Kiểm tra xem ổ cắm có được kết nối hay không
- 11. Cách kiểm tra xem ổ cắm JZMQ có được kết nối
- 12. Có thể node.js nghe trên ổ cắm UNIX không?
- 13. Làm cách nào để kiểm tra ổ cắm vẫn mở?
- 14. Đóng ổ cắm nghe trong chủ đề python
- 15. Kiểm tra xem Chronometer có đang chạy
- 16. Sử dụng JMeter để kiểm tra ổ cắm
- 17. Kiểm tra xem tệp có đang mở
- 18. cách kiểm tra xem đầu đọc thẻ flash trống có có trong khe cắm USB không?
- 19. Làm thế nào để kiểm tra xem tai nghe đã được cắm vào hay chưa?
- 20. Kiểm tra xem đường dẫn có đang trên mạng
- 21. Làm cách nào để kiểm tra xem một Ổ cắm hiện có được kết nối trong Java không?
- 22. Làm cách nào để kiểm tra xem kết nối ổ cắm có hoạt động trong Boost :: asio không?
- 23. Android nghe tin nhắn từ ổ cắm máy chủ
- 24. Kiểm tra xem tập lệnh php có đang chạy không
- 25. Kiểm tra xem cổng có đang mở trong ANT
- 26. C# .NET: Cách kiểm tra xem chúng tôi có đang chạy bằng pin không?
- 27. Ổ cắm nghe UDP ngừng nghe sau khi thay đổi cấu hình mạng
- 28. Kiểm tra xem kết nối ADODB có đang mở không
- 29. Ổ cắm trong Rust
- 30. Kiểm tra xem phần tử có đang hoạt ảnh CSS3
Vâng, tôi vừa nghĩ đến việc thêm nó vào bộ mô tả tệp và sử dụng để kiểm tra. Cảm ơn bạn đã trả lời! –
'getockopt (SOL_SOCKET, SO_ACCEPTCONN)' là cách chính xác để kiểm tra ổ cắm để nghe. Thay vào đó, bạn nên chấp nhận câu trả lời của mark4o. –
@RemyLebeau Tôi không biết điều đó. Mặc dù nó có thể là mã nhiều hơn, nhưng nó phù hợp hơn với câu hỏi của OP. –