Tôi cần phải xác định liệu một mã mà mã của tôi không tạo ra, trong đó GetFileType()==FILE_TYPE_PIPE
, có phải là ổ cắm hay không. Có vẻ như không phải là một API cho việc này.Làm cách nào để phân biệt tay cầm socket Win32 với các tay cầm ống khác?
Tôi đã thử cách sau. Ý tưởng chung là sử dụng một chức năng socket cụ thể và điều trị thất bại như là không có nghĩa là ổ cắm.
getsockopt()
- Đây là lần thử đầu tiên của tôi. Thật không may nó dường như treo khi được gọi bởi nhiều chủ đề trên cùng một (non-socket) xử lý.WSAEnumNetworkEvents()
- đây là những gì Gnulib làm nhưng sẽ có tác dụng phụ không mong muốn nếu tay cầm là ổ cắm.getpeername()
- đây là những gì Cygwin thực hiện nhưng điều này cũng sẽ không thành công đối với một số ổ cắm. Đoán xem một lỗi ngụ ý socket-ness có vẻ không đáng tin cậy và an toàn trong tương lai hay không.
Tôi không quan tâm nếu giải pháp chỉ hoạt động trên một số phiên bản của Windows, ví dụ: Vista, tôi luôn có thể quay trở lại một số phương pháp khác trong trường hợp chung.
No. Tôi sẽ cố gắng, cảm ơn. –