Bloklama. Bunu duymuş olmalısınız -- peki anlamı nedir? Kabaca
      söylemek gerekirse "blok" (block) sözcüğü "uyku" (sleep) için
      kullandığımız teknik bir terim. Bunu, yukarıdaki
      listener programını çalıştırdığınızda görmüş
      olmalısınız. Yani program çalışır ve orada öylece bir paketin
      gelmesini bekler. Olup biten şudur: Bu program
      recvfrom() işlevini çağırır, ortalıkta bir
      veri yoktur ve bu yüzden recvfrom()
      "bloklama" yapar (yani orada uyur) ta ki bir veri gelene kadar.
    
      Pek çok işlev blok yapar, yani uyur. accept()
      bloklar. Tüm recv() işlevleri bloklar, yani
      bekler. Bunu yapabilmelerinin sebebi ise onlara bunu yapabilmeleri
      için izin verilmiş olmasıdır. Soket tanımlayıcısını ilk aşamada
      socket() ile yarattığınızda, işletim sistemi
      çekirdeği onu bloklayan olarak ayarlar. Eğer bir soketin bloklama
      yapabilmesini istemiyorsanız o zaman fcntl()
      işlevini çağırmanız gerekir:
    
#include <unistd.h>
#include <fcntl.h>
.
.
sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
.
. 
      Bir soketi bloklamayan olarak ayarladığınızda o soketten bilgi
      alabilirsiniz. Eğer bloklamayan bir soketten bir şeyler okumaya
      kalkarsanız ve orada bir veri yoksa, bloklama yapmasına izin
      verilmediği için bir değer döndürecektir, bu değer -1
      olacaktır ve errno değişkeni de
      EWOULDBLOCK değerini alacaktır.
    
      Ancak genelde bu şekilde bilgi edinmeye çalışmak pek de iyi bir
      fikir değildir. Eğer programınızı sürekli soketten veri okumaya
      çalışır hale getirirseniz o zaman çok fazla işlemci zamanından
      çalarsınız. Okunmak üzere bir verinin gelip gelmediğini kontrol
      etmenin daha şık bir yöntemi vardır ve bu yöntem
      select() işlevini temel alır.