1
這是我使用的語句:我想讓接受系統調用爲非阻塞。我如何使接受系統調用爲非阻塞?
m_stat_arr_nClient_sockfd[nIndex]= accept(nServerSocket,(struct sockaddr *)&client_address, (socklen_t *)&client_len);
這是一個阻塞調用,所以我怎麼能做出這種非阻塞?
這是我使用的語句:我想讓接受系統調用爲非阻塞。我如何使接受系統調用爲非阻塞?
m_stat_arr_nClient_sockfd[nIndex]= accept(nServerSocket,(struct sockaddr *)&client_address, (socklen_t *)&client_len);
這是一個阻塞調用,所以我怎麼能做出這種非阻塞?
你必須使用fcntl
來設置你的nServerSocket
非阻塞;
int flags = fcntl(nServerSocket, F_GETFL, 0);
fcntl(nServerSocket, F_SETFL, flags | O_NONBLOCK);
一旦你這樣做了,在該套接字上調用accept()
不應再阻塞。
被警告,您接受的套接字將繼承非阻塞狀態。如果你不希望它們是非阻塞的,你必須清除它們上的'O_NONBLOCK'。 –
如果您必須將'&client_len'強制轉換爲'socklen_t *',那麼您正在做的事情非常錯誤。 –