2011-01-13 30 views
7

Tôi đang cố gắng tạo một máy chủ Linux chạy trong Windows.Sự khác nhau giữa socket và HANDLE trong Windows là gì?

Bộ mô tả ổ cắm và tệp được xử lý giống nhau trong Linux. Một số api hệ thống có sẵn cho cả bộ mô tả ổ cắm và tệp.

Tuy nhiên, tôi xử lý socket bằng Winsock và HANDLE (bộ mô tả tệp) bằng WIN API.

Vì vậy, tôi cần phải biết một số nguyên là một ổ cắm hoặc một HANDLE.

Bây giờ đây là câu hỏi:

giá trị trả về từ socket() và open() sẽ được như nhau trong Windows?

Nếu chúng luôn khác nhau, tôi có thể viết socket() và mở() của riêng mình để bọc hệ thống. và ghi lại giá trị trả về từ api của hệ thống cho dù số nguyên là một socket hay HANDLE.

Nếu chúng giống nhau, tôi không có ý định giải quyết nó.

+0

'Giống nhau' theo nghĩa nào? – EJP

+0

cùng giá trị. – Celebi

Trả lời

10

Xử lý ổ cắm là trình xử lý Win32 (NT kernel) để bạn có thể, ví dụ, sử dụng ReadFile hoặc WriteFile trên chúng. Cũng có trạng thái chế độ người dùng được kết hợp với trình điều khiển được duy trì bởi Winsock, đó là lý do tại sao bạn cần sử dụng closesocket() thay vì CloseHandle().

mở() trả về các mô tả tệp CRT khác với trình xử lý Win32. Bạn có thể tạo một bộ mô tả tập tin CRT bằng cách sử dụng _open_osfhandle(). Nhưng điều này không được khuyến khích cho ổ cắm vì bạn không thể đóng tập tin một cách sạch sẽ. Bạn hoặc sử dụng close() sẽ làm rò rỉ trạng thái chế độ người dùng Winsock, hoặc closesocket() sẽ làm rò rỉ bộ mô tả CRT.

+0

Nếu có thể, bạn có thể giải thích trạng thái của trạng thái chế độ người dùng được liên kết với các núm điều khiển 'SOCKET' không? Điều này quan trọng bởi vì trạng thái như cache có thể ảnh hưởng đến cách các hàm socket tương tác với các hàm không phải socket. –

+0

@Seven, Winsock 2 có kiến ​​trúc "Nhà cung cấp dịch vụ phân lớp" nên Winsock giữ bản đồ từ tay cầm đến nhà cung cấp. Mỗi nhà cung cấp có thể giữ trạng thái bổ sung. Trạng thái bổ sung nào được giữ lại (nếu có) là chi tiết thực hiện. LSP có thể không lưu trữ hoặc nhận dữ liệu đệm/đệm vì điều này sẽ phá vỡ khả năng tương thích với các ứng dụng sử dụng ReadFile hoặc WriteFile trên các chốt socket. – John

-1

Giá trị trả về từ socket() và mở() có giống nhau trong Windows không?

Xử lý ổ cắm trong Windows được phân bổ bởi hệ thống phụ WINSOCK mà không phải là một phần của hệ thống tệp.

+0

Điều này được sử dụng đúng trong quá khứ nhưng khi Windows NT socket xử lý hiện nay đầy đủ các đối tượng hạt nhân và không chỉ thực hiện như một chế độ người dùng DLL mặc dù vẫn còn một số trạng thái chế độ người dùng ngày hôm nay. –

Các vấn đề liên quan