2010-02-04 7 views
16

Soket işlevi çağrısında C soket tanımlayıcısının değeri olarak 0 veya 1 döndürülebilir mi?Soket() işlev çağrısı için 0 veya 1 geçerli dönüş değeri var

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

adam sayfasına göre ben:

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

O elinden gibi görünüyor, ya da en azından adam sayfası Ayrılmış değerlerin bahsetmiyor. Geçerli soket tanımlayıcılarının 2 ya da daha fazla olması gereken başka bir yer mi yazılmıştır?

Özellikle bir Linux 2.4.22 çekirdeği üzerinde çalışıyorum, ancak soket unix tabanlı herhangi bir uygulama için biliyorum.

cevap

15

Hem 0 hem de 1 geçerli dönüş değerleridir ve uygulama standart girdisini veya çıktı dosya tanıtıcılarını kapatmışsa gerçekten iade edilebilir.

1

Man sayfasına göre, evet, olabilir.

3

sizin süreç başlar 0 Stdin ve 1 stdout'u olduğunu, ancak bunları kapatabilir ve Stdin veya stdout'u kapalı varsa bu nedenle,

4

0 veya 1 tam gelecektir geri bu FD alabilir tanımlayıcıları. Bu meydana gelebilir, çünkü yanlışlıkla (başlangıçta soket tanımlayıcısını sakladığınız bir değişken) başlatma işleminden sonra soket kapanma işlevine geçebilirsiniz. Değişken, 0'a başlatılabileceğinden, stdin'in kapanmasına neden olabilir.

3

Geçerli dosya tanıtıcıları olmayan tek değerler, 0'dan küçük olanlardır - bir hata gösterecek ve errno ayarlanacaktır. Hiç negatif olmayan bir değer görmemelisiniz -1.