2010-02-04 39 views
16

Có thể gọi hàm socket trong C trả về 0 hoặc 1 làm giá trị cho bộ mô tả socket không?Là 0 hoặc 1 giá trị trả về hợp lệ cho lệnh gọi hàm socket()

int socket(int domain, int type, int protocol); 

Theo trang người đàn ông tôi có:

RETURN VALUE 
    -1 is returned if an error occurs; otherwise the return value is a 
    descriptor referencing the socket. 

Nó có vẻ như nó có thể, hoặc ít nhất là trang người đàn ông không đề cập đến bất kỳ giá trị reserved. Có phải nó được viết ở nơi nào khác mà các mô tả socket hợp lệ cần phải là 2 hoặc cao hơn?

Tôi đang chạy cụ thể trên hạt nhân 2.4.22 Linux, nhưng tôi tò mò muốn biết về bất kỳ việc triển khai ổ cắm dựa trên Unix nào.

Trả lời

15

Cả 0 và 1 đều là giá trị trả lại hợp lệ và có thể được trả lại nếu ứng dụng đã đóng bộ mô tả tệp đầu vào hoặc đầu ra tiêu chuẩn của nó.

1

Theo trang người đàn ông, có, nó có thể.

3

Khi quá trình của bạn bắt đầu, 0 là stdin và 1 là stdout, nhưng bạn có thể đóng chúng lại, và do đó, bạn có thể có được những FD lại

4

0 hoặc 1 cách chính xác sẽ đến nếu bạn đã đóng stdin hoặc stdout mô tả. Điều này có thể xảy ra, bởi vì do nhầm lẫn, bạn có thể đang truyền một biến (hầu hết có thể là một trong đó bạn lưu trữ bộ mô tả socket của bạn) vào hàm đóng socket sau khi khởi tạo. Kể từ khi biến có thể được khởi tạo thành 0, nó có thể gây đóng cửa stdin.

3

Giá trị duy nhất không phải là bộ mô tả tệp hợp lệ là những giá trị nhỏ hơn 0. -1 sẽ cho biết lỗi và sẽ không đặt sai. Bạn sẽ không bao giờ thấy giá trị âm mà không phải là -1.

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