winsock ioctlsocket 用法

2022-11-24 19:23:19 字數 1966 閱讀 2318

◆i/o操作函式:主要用於獲取與套接字相關的操作引數。

int  ioctlsocket(socket s, long cmd, u_long far * argp );    

s為i/o操作的套接字。

cmd為對套接字的操作命令。

argp為命令所帶引數的指標。

常見的命令:

//確定套接字自動讀入的資料量

#define fionread _ior(''''f'''', 127, u_long) /* get # bytes to read */

//允許或禁止套接字的非阻塞模式,允許為非0,禁止為0

#define fionbio _iow(''''f'''', 126, u_long) /* set/clear non-blocking i/o */

//確定是否所有帶外資料都已被讀入

#define siocatmark _ior(''''s'''', 7, u_long) /* at oob mark? */

本函式可用於任一狀態的任一套介面。它用於獲取與套介面相關的操作引數,

而與具體協議或通訊子系統無關。支援下列命令:

fionbio:允許或禁止套介面s的非阻塞模式。argp指向一個無符號長整型。如

允許非阻塞模式則非零,如禁止非阻塞模式則為零。當建立一個套介面時,它就

處於阻塞模式(也就是說非阻塞模式被禁止)。這與bsd套介面是一致的。wsaas

ynselect()函式將套介面自動設定為非阻塞模式。如果已對一個套介面進行了ws

aasynselect() 操作,則任何用ioctlsocket()來把套介面重新設定成阻塞模式的

試圖將以wsaeinval失敗。為了把套介面重新設定成阻塞模式,應用程式必須首先

用wsaasynselect()呼叫(ievent引數置為0)來禁至wsaasynselect()。

fionread:確定套介面s自動讀入的資料量。argp指向一個無符號長整型,其中

存有ioctlsocket()的返回值。如果s是socket_stream型別,則fionread返回在一

次recv()中所接收的所有資料量。這通常與套介面中排隊的資料總量相同。如果

s是sock_dgram 型,則fionread返回套介面上排隊的第一個資料包大小。

siocatmark:確實是否所有的帶外資料都已被讀入。這個命令僅適用於sock_s

ine)。如無帶外資料等待讀入,則該操作返回true真。否則的話返回false假,

下一個recv()或recvfrom()操作將檢索“標記”前一些或所有資料。應用程式可

用siocatmark操作來確定是否有資料剩下。如果在“緊急”(帶外)資料前有常

規資料,則按序接收這些資料(請注意,recv()和recvfrom()操作不會在一次調

用中混淆常規資料與帶外資料)。argp指向一個bool型數,ioctlsocket()在其中

存入返回值。

相容性:

本函式為berkeley套介面函式ioctl()的一個子集。其中沒有與fioasync等價的

命令,siocatmark是套介面層次支援的唯一命令。

返回值:

成功後,ioctlsocket()返回0。否則的話,返回socket_error錯誤,應用程式

可通過wsagetlasterror()獲取相應錯誤**。

錯誤**:

wsanotinitialised:在使用此api之前應首先成功地呼叫wsastartup()。

wsaenetdown:windows套介面實現檢測到網路子系統失效。

wsaeinval:cmd為非法命令,或者argp所指引數不適用於該cmd命令,或者該命

令不適用於此種型別的套介面。

wsaeinprogress:一個阻塞的windows套介面呼叫正在執行中。

wsaenotsock:描述字不是一個套介面。

winsock IO模型WSAAsynSelect

wsaasynselect模型 wsaasynselect模型也是一個常用的非同步i o模型。應用程式可以在一個套接字上接收以 windows訊息為基礎的網路事件通知。該模型的實現方法是通過呼叫wsaasynselect函 數 自動將套接字設定為非阻塞模式,並向windows註冊一個或多個網路時間,...

WINSOCK網路函式

標頭檔案 winsock2.h 庫 ws2 32.lib庫 如果是在wince中,不支援sock2,所以 標頭檔案 winsock.h 庫 wsock32.lib 如果從mswsock.h中使用了擴充套件api,則需要連結mswsock.dll 2.初始化winsock int wsastartup...

第二章 設計Winsock

2.1 系統體系結構 提供程式分為兩種型別 基礎提供程式和分層提供程式。基礎提供程式位於傳輸協議頂端 分層提供程式位於ws2 32.dll之下,基礎提供程式之上,能截獲並操縱winsock呼叫 如果一個應用程式利用分層提供程式建立了一個套接字,分層提供程式將使用該套接字截獲所有的winsock呼叫。...