Vay be! Deminden beri send() ile veri gönderip
recv() ile de veri okuyorsunuz ve artık
yoruldunuz. Soket tanımlayıcınız ile ilişkilendirilmiş olan bağlantıyı
kesmenin zamanıdır. Kolayı var. Alışık olduğunuz Unix dosya tanımlayıcı
kapatma işlevi olan close() işlevini kullanın:
Böylece artık bu sokete ne yazılabilir ne de buradan veri okunabilir.
Diğer uçta bunları yapmaya çalışan kişi artık bir hata mesajı ile
karşılaşacaktır.
Eğer soket kapatma işlemi üzerinde biraz daha deentim sahibi olmak
isterseniz o zaman shutdown() işlevini tercih
edebilirsiniz. Bu işlevi kullanarak iletişim kanalını tek yönlü ya
da çift yönlü olarak kapatabilirsiniz ( close()
işlevi iki taraflı olarak keser). İşlev şöyledir:
int shutdown(int sockfd, int how);
sockfd kapatmak istediğiniz soket dosya
tanımlayıcısıdır ve how değişkeni de şu
değerlerden birini alabilir:
0 -- Bundan sonraki okumalara izin verme
1 -- Bundan sonraki göndermelere (yazmalara)
izin verme
2 -- Bundan sonraki göndermelere ve okumalara
izin verme (close() işlevinin yaptığı gibi)
shutdown() başarılı olarak görevini tamamlarsa
0 döndürür ama eğer bir hata ile karşılaşırsa
-1 döndürür (ve errno
değişkenine hata kodunu yazar).
Eğer shutdown() işlevini bağlantısız veri paketi
soketleri üzerinde kullanırsanız bu soketler artık send()
ve recv() işlevleri tarafından kullanılamaz hale
gelirler (bunları, connect() ile bağlanmak
istediğinizde kullanabileceğinizi unutmayın).
Bir başka önemli nokta da: shutdown() aslında
dosya tanımlayıcısını kapatmaz sadece kullanılabilirliğini
değiştirir. Soket tanımlayıcısını gerçekten iptal etmek istiyorsanız
close() kullanmalısınız.
Yapacak birşey yok.