Ana içeriğe geç
Kitap 11 · AğlarSayfa 26 / 37

Socket

Türkçe karşılığı
soket
Okunuşu
sokit

Günlük kullanımda iki ad da yaygın.

Güncellendi 3 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/socket

Kısaca

Socket, bir programın ağ üzerinden veri gönderip almak için açtığı; IP adresi, port numarası ve protokolle tanımlanan yazılım tabanlı bir uç noktadır.

Ağ soketi (socket) nedir?

Socket, bir uygulamanın ağ üzerinden iletişim kurmak için kullandığı programlama arayüzüdür. Program işletim sisteminden bir socket ister, onu uzak bir adrese bağlar ya da yerel bir adrese bağlar (bind) ve ardından bir dosyayla yaptığı gibi onun üzerinden veri okur ve yazar. Tarayıcılardan ve web sunucularından veritabanı sürücülerine kadar hemen her ağ programı socket'ler üzerine kuruludur; bu genellikle ilk kez 1980'lerin başında BSD Unix'te ortaya çıkan ve bugün her büyük işletim sistemi tarafından desteklenen Berkeley sockets API'si aracılığıyla olur.

Bir TCP sunucusu bir socket oluşturur, onu 8080 gibi bir porta bağlar ve listen() çağırır; bir istemci her bağlandığında accept() o tek konuşmaya ayrılmış yeni bir socket döndürür. İstemci kendi socket'ini oluşturur ve sunucunun adresiyle connect() çağırır; bundan sonra iki taraf da send() ve recv() kullanır. Her TCP bağlantısı dört değerle tanımlanır: kaynak IP adresi, kaynak port, hedef IP adresi ve hedef port. UDP socket'i bağlanmayı atlar ve yalnızca tek tek datagramlar gönderip alır; Unix benzeri sistemlerde her socket bir dosya tanımlayıcısıdır (file descriptor), yani açık dosyalar için kullanılan aynı türden bir tutamaçtır.

IP adresi bir binanın sokak adresi, port bir daire numarasıysa, socket o dairede kurulu telefondur: bir programın gerçekte konuştuğu ve dinlediği araç. Çoğu geliştirici socket'leri dolaylı olarak HTTP istemcileri, web framework'leri ve veritabanı kitaplıkları aracılığıyla kullanır; ama onlar ECONNREFUSED (o portu dinleyen hiçbir şey yok) ve EADDRINUSE (port zaten alınmış) gibi hatalarda ve zaman aşımı ile bağlantı havuzu gibi ayarlarda karşımıza çıkar. Unix domain socket'ler, aynı makinedeki süreçler arasında ağ yığınından geçmeden hızlı iletişim için aynı API'yi kullanır.

Socket sıklıkla port ve WebSocket ile karıştırılır. Port yalnızca bir sayıdır; socket ise bir programın içindeki canlı bir nesnedir ve dinleyen tek bir port, her istemci için bir tane olmak üzere aynı anda binlerce bağlı socket'e sahip olabilir. WebSocket ise adına rağmen, tarayıcılara bir sunucuyla uzun ömürlü iki yönlü bir bağlantı sağlayan belirli bir protokoldür; sıradan bir TCP socket'i üzerinde çalışır ama düşük seviyeli socket API'siyle aynı şey değildir.

Önemli noktalar

  • Socket, bir programın ağ verisi gönderip aldığı uç noktadır.
  • Sunucular bind(), listen() ve accept() çağırır; istemciler connect() çağırır; sonra ikisi de send() ve recv() kullanır.
  • Bir TCP bağlantısı kaynak IP, kaynak port, hedef IP ve hedef port ile tanımlanır.
  • Unix benzeri sistemlerde socket bir dosya tanımlayıcısıdır ve Unix domain socket'ler tek bir makinedeki süreçleri bağlar.
  • Port bir sayıdır, socket canlı bir uç noktadır ve WebSocket ayrı bir protokoldür.

Örnek

Python socket'leriyle küçük bir TCP echo sunucusupython
import socket

# Accept connections and send back whatever each client sends
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(("127.0.0.1", 8080))  # claim an address and port
    server.listen()                   # start accepting connections
    while True:
        conn, addr = server.accept()  # a new socket for each client
        with conn:
            data = conn.recv(1024)
            conn.sendall(data)        # echo the bytes back

# Try it from another terminal: echo hello | nc 127.0.0.1 8080

Sık sorulan sorular

Socket ile port arasındaki fark nedir?

Port, bir makinedeki bir hizmeti tanımlayan sayıdır; socket ise bir programın iletişim kurmak için oluşturduğu, bir adrese, bir porta ve bir protokole bağlı uç noktadır. Dinleyen tek bir portun, her istemci için bir tane olmak üzere birçok bağlı socket'i olabilir.

Socket ile WebSocket arasındaki fark nedir?

Socket, her türlü programın kullandığı ağ iletişimi için genel işletim sistemi arayüzüdür. WebSocket ise bir HTTP yükseltme isteğiyle başlatılan ve web sayfalarına bir sunucuyla kalıcı iki yönlü bir kanal sağlayan belirli bir protokoldür; bir TCP socket'inin üzerinde çalışır.

Connection refused ne anlama gelir?

ECONNREFUSED, socket'inizin hedef makineye ulaştığı ama o portu dinleyen hiçbir program olmadığı için işletim sisteminin bağlantıyı reddettiği anlamına gelir. Sunucunun çalıştığını ve beklediğiniz adres ve portu dinlediğini kontrol edin.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar