VC中使用API編寫的socket程序中如何設置阻塞和非阻塞accept,recv
關於阻塞和非阻塞概念,可能有些初學編程的人不是很清楚. 阻塞是指在函數執行時如果條件不滿足,程序將永遠停在那條函數那裏不在往下執行,而非阻塞則是函數不管條件是否滿足都會往下執行.例如在通訊過程中,當接收數據的時候,對於阻塞方式,程序將壹直等到接收到數據才向下執行,而對於非阻塞方式,不管是否接收到數據,接收函數將被執行過去.壹個比較完善的程序壹般來講都使用非阻塞的方式來進行.原因在於如果采用阻塞方式,程序將停在那裏壹直等待條件滿足,正常情況下是沒有問題的,但如果妳想停止阻塞的程序,就出現了比較麻煩的問題. 對於VC中使用API方式進行的SOCKET編程,需要使用下面的函數來設置阻塞方式和非阻塞方式: ioctlsocket(gListenSocket, FIONBIO,&tBlockMode); //tBlockMode 0--block,1--no block ioctlsocket(gWorkSocket, FIONBIO,&tBlockMode); 註意,在開發server端程序時,這樣設置會控制監聽socket的accept()函數的阻塞和非阻塞模式,也可以設置工作socket的recv函數的阻塞和非阻塞模式.設置了非阻塞模式,可以使用查詢方式進行accept和recv函數執行.