我對socket編程的瞭解主要來自本教程:如何使用套接字操作通知有關不響應的TCP服務器?
CS 50 Software Design and Implementation, Lecture 19, Socket Programming
由於在客戶端和服務器在兩個不同的系統和代理運行的TCP客戶機/服務器模型是在它們之間,假設客戶端可以通過代理將消息發送到服務器,然後服務器突然變得不響應(說它被重置)。代理和服務器之間的連接會發生什麼,以及如何處理?
我的意思是,我可以採用什麼技術來檢測這樣的事件,關閉我的連接,並向客戶端返回錯誤消息?
我能想到的一種方法是檢查代理中的接收緩衝區,如果一段時間內沒有數據,告訴客戶端服務器已關閉。但我認爲超時是一種原始的方法。在套接字編程中是否有已知的標準方法或替代方案?
您正在實施客戶端,服務器還是代理?無論哪種方式,TCP都有一個可以啓用的內置保持活動心跳。根據您運行的平臺,您可以使用'setsockopt(SOL_SOCKET,SO_KEEPALIVE)'或'setsockopt(SOL_TCP,TCP_KEEPCNT/TCP_KEEPIDLE/TCP_KEEPINTVL)'或'WSAIoctl(SIO_KEEPALIVE_VALS)'。如果心跳失敗,連接消失,所以請關閉您的套接字句柄。 –
「_提供TCP客戶端/服務器模型..._」TCP沒有客戶端或服務器。客戶機/服務器模型是一個應用程序層模型。 TCP建立對等主機之間的連接。 –