İstemci göndermeyi bitirir, vekil sunucu EOF görür ve yanıt kaybolur. Her iki vekil soketini hemen kapatmak tam olarak bu sıraya yol açabilir. Bir TCP aktarıcısında bir yönde düzenli son, diğer yönün bittiği anlamına gelmez.

İstek gönderen, gönderme tarafını kapatan ve yanıtı bekleyen bir istemci düşünün:

client -- request, then FIN --> proxy --> service
client <-------- reply ------- proxy <-- service

Vekil sunucunun iki TCP bağlantısı ve bağımsız hareket eden iki bayt akışı vardır. Kendisinden önce gelen baytları ilettikten sonra girdinin sonu göstergesini de ileri taşımalıdır.

EOF'u iletmeden önce kuyruğu boşaltın

Bir TCP akışında sıfırdan farklı boyutta bir alımda, sıfır dönüşü o gelen akışın düzenli sonunu gösterir. O okuma yönünü tamamlanmış olarak işaretleyin. Ondan daha fazla girdi beklemeyi bırakın, ancak karşı soket için kuyruğa alınmış baytları saklayın.

İstemciden hizmete kuyruk boşaldığında, bir POSIX soketinde shutdown(service_socket, SHUT_WR) çağırın. Bu, hizmete doğru daha fazla iletimi bitirirken hizmetten istemciye yönü kullanılabilir bırakır. Hizmet yanıtını bitirdiğinde, yanıt kuyruğunu boşalttıktan sonra ayna işlemi uygulayın.

Tanımlayıcıların kapatılması, her iki yönün ve bekleyen tamponlarının tamamlandığı noktaya ya da bir hata veya iptalin sonlandırma gerektirdiği yere aittir. Kalan yarısını hiçbir zaman tamamlamayan bir eş için sınırlı bir zaman aşımı tutun.

Hazır olma okumaya bir davettir

Okunabilir bir sokette veri veya EOF durumu olabilir. recv çağırın ve sonucu yorumlayın. Pozitif değerler iletilecek baytlardır; sıfır yönün sonudur. Engelleyici olmayan bir sokette EAGAIN veya EWOULDBLOCK şu anda daha fazla girdi olmadığı anlamına gelirken EINTR yeniden deneme gerektirebilir. İkisi de EOF ile aynı olay değildir.

Döndürülen bayt tamponunda FIN bayrağı aramayın. TCP bu API'ye düzenli bir bayt akışı teslim eder; paket sınırları ve FIN segmenti olağan uygulama yükü değildir.

Bu, ham bir bayt tünelinin yaşam döngüsüdür. İletileri ayrıştıran bir HTTP vekil sunucusu yine de HTTP çerçevelemesine uymak zorundadır ve TLS'i sonlandıran bir vekil sunucunun da bir TLS kapatma protokolü vardır. Bu protokol kararlarını yönlü TCP aktarıcısının üstünde tutun.

İlgili makaleler