2014-06-13 115 views
1

我們有簡單的客戶端/服務器應用程序。
我們在基於beaglebone黑色的定製板上運行服務器。啓動時選擇功能需要更多時間

我們在初始化腳本中啓動一個服務器,在主機PC上運行的客戶端試圖連續連接到服務器。
選擇函數調用服務器應用程序用於前檢查服務器上的套接字事件接受被調用,如下
selectOperationStatus = select(socketfd + 1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &tv);

if (selectOperationStatus > 0){
clientFd = accept(socketfd, (struct sockaddr *) &client_addr, &sin_size)
}

我們觀察到,在啓動過程中,選擇函數調用需要13秒鐘來接受來自客戶端的連接。 但是,如果同一個服務器應用程序在啓動後的某個時間啓動,它將連接1秒鐘。

爲什麼在啓動時選擇函數需要時間(〜13秒)? 任何建議/指針調試?任何替代方案?

回答

4

經過一番調試,我們發現真正的問題是板卡的DHCP客戶端需要一段時間才能獲得IP。只要ip被分配select()函數返回。
所以選擇函數並不是我們最初想到的罪魁禍首。雖然程序卡在選擇功能,但實際的問題是在啓動dhcp花費時間分配IP後;有時DHCP需要7-12秒來分配IP。

DHCP服務器運行在安裝在virtualbox中的ubuntu上,當我們將板連接到路由器ip時,分配變得很快(3-5秒內)。