本系統(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日公布之 WINSOCK 第1.1版(如附錄)中所定義之函式 (routine); 包括了30個Berkeley Software Distribution (BSD) 的函式以及16個符合 Windows Message-driven 特性的函式。
(11) inet_ntoa():將一網路位址轉換成「點格式」字串。
格式: char FAR * PASCAL FAR inet_ntoa( struct in_addr in );
參數: in 一個代表 Internet 位址的結構
傳回值: 成功 - 一個代表位址的「點格式」(dotted) 字串
失敗 - NULL
說明: 此函式將一 Internet 位址轉換成「a.b.c.d」字串格式。
(12) ioctlsocket():控制 Socket 的模式。
格式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP );
參數: s Socket 的識別碼,cmd 指令名稱,argP 指向 cmd 參數的指標
傳回值: 成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 此函式用來獲取或設定 Socket 的運作參數。其所提供的指令有:
FIONBIO -- 開關 non-blocking 模式
FIONREAD -- 自 Socket 一次可讀取的資料量
SIOCATMARK -- OOB 資料是否已被讀取完 (*暫不提供此功能)
(13) listen():設定 Socket 為監聽狀態,准備被連接。
格 式: int PASCAL FAR listen( SOCKET s, int backlog );
參 數: s Socket 的識別碼,backlog 未真正完成連接前(尚未呼叫 accept() 前)彼端的連接要求的最大個數
傳回值: 成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 使用者可利用此函式來設定 Socket 進入監聽狀態,並設定最多可有多少個在未真正完成連接前的彼端的連接要求。(目前最大值限制為 5, 最小值為1)
(14) ntohl():將一 32 位元 u_long 的值由 network 排列方式轉換成host 排列方式。
格式: u_long PASCAL FAR ntohl( u_long netlong );
參數: netlong 一個 32 位元 network 排列方式的數目
傳回值: 一個 32 位元 host 排列方式的數目
說明: 因為 network 的排列方式與 host 的排列方式可能不同,所以我們需要此一函式來做轉換。
(15) ntohs():將一 16 位元 u_short 的值由 network 排列方式轉換成host 排列方式。
格式: u_short PASCAL FAR ntohs( u_short netshort );
參數: netshort 一個 16 位元 network 排列方式的數目
傳回值: 一個 16 位元 host 排列方式的數目
說明: 因為 network 的排列方式與 host 的排列方式可能不同,所以我們需要此一函式來做轉換。
(16) recv():自 Socket 接收資料。
格式: int PASCAL FAR recv( SOCKET s,char FAR *buf,int len,int flags );
參數: s Socket 的識別碼,buf 存放接收到的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式
傳回值: 成功 - 接收到的資料長度 (若對方 Socket 已關閉,則為 0)
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 此函式用來自連接式的 Datagram Socket 或 Stream Socket接收資料。對 Stream Socket 言,我們可以接收到目前有效的 (available)資料,但其數量不超過 len 的大小。若是此 Socket 設定 SO_OOBINLINE,且有 out-of-band 的資料未被讀取,那麽只有 out-of-band 的資料被取出。
對 Datagram Socket 言,只取出第一個 datagram;若是該 datagram 大於使用者提供的儲存空間,那麽只有該空間大小的資料被取出,多馀的資料將遺失,且回覆錯誤的訊息。 flags 的值可為 MSG_PEEK、MSG_OOB(*暫不提供此功能)的組合.
(17) recvfrom():讀取一個 Datagram,並儲存資料來源的位址。
格 式: int PASCAL FAR recvfrom( SOCKET s,char FAR *buf,int len,int flags,struct socketaddr FAR *from,int FAR *fromlen );
參 數: s Socket 的識別碼,buf 存放接收到的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式,from 資料來源的位址,fromlen from 的大小
傳回值: 成功 - 接收到的資料長度 (若對方 Socket 已關閉,則為 0)
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 此函式用來讀取資料並記錄資料來源的位址。對 Stream Socket 言,其作用與 recv() 相同,參數 from 及 fromlen 將不被用到。
(18) select():檢查一或多個 Sockets 是否處於可讀、可寫或錯誤的狀態。
格式: int PASCAL FAR select( int nfds,fd_set FAR *readfds,fd_set FAR *writefds,fd_set FAR *exceptfds,const struct timeval FAR *timeout );
參數: nfds 此參數在此並無作用,readfds 要被檢查是否可讀的 Sockets,writefds 要被檢查是否可寫的 Sockets,exceptfds 要被檢查是否有錯誤的 Sockets,timeout 此函式該等待的時間。若為 NULL 時,表示 blocking,此函式會等到有事件發生。
傳回值: 成功 - 符合條件的 Sockets 總數 (若 Timeout 發生,則為 0)
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 使用者可利用此函式來檢查 Sockets 是否有資料可被讀取,或是有空間可以寫入,或是有錯誤發生。
(19) send():使用連接式的 Socket 傳送資料。
格式: int PASCAL FAR send( SOCKET s,const char FAR *buf,int len,int flags );
參數: s Socket 的識別碼,buf 存放要傳送的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式
傳回值: 成功 - 送出的資料長度
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 此函式適用於連接式的 Datagram 或 Stream Socket 來傳送資料。對 Datagram Socket 言,若是 datagram 的大小超過限制,則將不會送出任何資料,並會傳回錯誤值。若是傳送 (transport) 系統內之儲存空間不夠存放這些要傳送的資料,send() 將會被 block 住,除非該 Socket 被設定為 non-blocking 模式。使用者亦須注意 send()函式執行完成,並不表示資料已經成功地送抵對方了。 flags 的值可設為 MSG_DONTROUTE(*暫不提供此功能)及 MSG_OOB 的組合.
(20) sendto():將資料送到指定的目的地。
格式: int PASCAL FAR sendto( SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen );
參數: s Socket 的識別碼,buf 存放要傳送的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式,to 資料要送達的位址,tolen to 的大小
傳回值: 成功 - 送出的資料長度
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明: 此函式適用於 Datagram 或 Stream Socket 來傳送資料到指定的位址。對 Datagram Socket 言,若是 datagram 的大小超過限制,則將不會送出任何資料,並會傳回錯誤值。對 Stream Socket 言,其作用與 send() 相同;參數 to 及 tolen 在此並無作用。 若是傳送 (transport) 系統內之儲存空間不夠存放這些要傳送的資料,sendto() 將會被 block 住,除非該Socket 被設定為 non-blocking 模式。使用者亦須注意 sendto() 函式執行完成,並不表示資料已經成功地送抵對方了。 flags 的值可設為 MSG_DONTROUTE(*暫不提供此功能)及 MSG_OOB 的組合.