Iam嘗試基於數據報套接字(UDP)創建迭代服務器。 它調用連接到它從第一個recvfrom()調用獲得的第一個客戶端(是的,我知道這不是真正的連接)。 服務此客戶端後,我斷開UDP套接字(調用連接AF_UNSPEC) 然後我調用recvfrom()從下一個客戶端獲取第一個數據包。斷開並重新連接已連接的數據報套接字
現在的問題是,在循環的第二個迭代recvfrom()的調用返回0.我的客戶端永遠不會發送空數據包,所以會發生什麼。
這是什麼做的IAM(僞):
s = socket(PF_INET, SOCK_DGRAM, 0)
bind(s)
for(;;)
{
recvfrom(s, header, &client_address) // get first packet from client
connect(s,client_address) // connect to this client
serve_client(s);
connect(s, AF_UNSPEC); // disconnect, ready to serve next client
}
編輯:我找到的bug在我的客戶不小心發送一個空包。 現在我的問題是如何讓客戶端等待得到服務,而不是發送請求到任何地方(服務器連接到另一個客戶端,並且不提供任何其他客戶端)。
Connect使用send()或recv()函數設置一個內部過濾器,從中接收和發送地址。 recv():「對於SOCK_DGRAM套接字,從連接調用中指定的目標地址的第一個排隊數據報中提取數據」。 – codymanix 2009-05-26 16:30:07
你是對的,我的客戶正在發送(由於錯誤)一個空包。現在我有另一個問題。應該在隊列中等待獲得服務的客戶端發送其第一個請求數據包(從未從服務器接收數據包)。然後它嘗試接收響應,並且recv返回-1。我如何讓客戶等待? – codymanix 2009-05-26 21:15:03