CAsyncSocket::Receive

對於數據報套接字,本函式從第一個入隊的數據報中解出數據,發到緩衝中。如果數據報比緩衝大,則緩衝中僅包含數據報的前一部分,而丟棄其它的數據,Receive返回SOCKET_ERROR,錯誤代碼設成WSAEMSGSIZE。

基本介紹

  • 中文名:CAsyncSocket::Receive
  • 類別:函式
  • 用途:從套接字獲取數據
  • 參數:lpBuf
簡介,說明,

簡介

函式功能描述:本函式用於從套接字獲取數據
CAsyncSocket::Receive
virtual int Receive(void* lpBuf,int nBufLen, int nFlags = 0 );
返回值
調用成功時,返回接收到的位元組數。如果連線被關閉了,返回0;否則返回SOCKET_ERROR,可以調用GetLastError得到特定的錯誤代碼。此成員函式可用的錯誤代碼有:
1 WSANOTINITIALISED 調用本API函式之前必須成功執行了AfxsocketInit函式。
2 WSAENETDOWN Windows Sockets檢測到網路系統故障。
3 WSAENOTCONN 套接字沒有連線上。
4 WSAEINPROGRESS 正在進行成塊的Windows Sockets操作。
5 WSAENOTSOCK 描述符不是一個套接字
6 WSAEOPNOTSUPP 設定了MSG_OOB,但是套接字的類型不是SOCK_ STREAM。
7 WSAESHUTDOWN 套接字已經被關閉。調用ShutDown(參數nHow的值設為0或2)後,就不能在該套接字上調用Receive了。
8 WSAEWOULDBLOCK 套接字標誌為非成塊,而Receive操作將產生成塊。
9 WSAEMSGSIZE 數據報太大,不能完全放到緩衝中,將被截斷。
10 WSAEINVAL 套接字沒有用Bind綁定。
11 WSAECONNABORTED 由於逾時或其它故障使虛電路異常退出。
12 WSAECONNRESET 遠端重置了虛電路。
輸入數據的緩衝。
nBufLen
lpBuf的大小(位元組數)。
nFlags
設定調用模式。本函式的語義由套接字選項和nFlags參數共同決定。nFlags由下面的任一個值組成,也可以用C++的OR操作符組合使用:
1 MSG_PEEK 把數據拷貝到緩衝,但不從輸入佇列上移走。
2 MSG_OOB 處理帶外數據(請參閱在線上文檔“Win32 SDK”中的“Windows套接字編程注意事項")

說明

本函式用於從套接字獲取數據。它從已連線的流套接字或數據報套接字上讀輸入的數據。
對於流套接字(SOCK_STREAM類型的套接字),本函式返回緩衝中不超過緩衝大小的所有有效數據。如果套接字被設定成線上接收帶外數據(套接字選項為SO_OOBINLINE),並且帶外數據沒有被讀,則僅僅返回帶外數據。套用可以使用IOCtl的SIOCATMARK選項或者OnOutOfBandData來檢測是否還有未讀的帶外數據
如果套接字中沒有輸入數據,則返回SOCKET_ERROR,並把錯誤代碼設為WSAEWOULD-BLOCK。當更多的數據到達時,可用回調函式OnReceive來檢測。如果套接字是SOCK_STREAM類型的,並且遠端接點已經正常地關閉連線,Receive會立即返回,接收的數據當然是0位元組。如果連線被重置了,Receive將會異常返回,錯誤代碼為WSAECONNRESET。
示例
參照CAsyncSocket::OnReceive.
請參閱
CAsyncSocket::AsyncSelect, CAsyncSocket::Create,CAsyncSocket::ReceiveFrom, CAsyncSocket::Send

相關詞條

熱門詞條

聯絡我們