WSARecvFrom,Windows移動開發平台Winsock函式,用於在Socket上返回數據並存儲原地址信息。
介紹,語法,參數,返回值,錯誤代碼,另請參閱,
介紹
WSARecvFrom,Windows移動開發平台Winsock函式,用於在Socket上返回數據並存儲原地址信息。套用於Windows Mobile和Windows CE。
語法
int WSARecvFrom(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
struct sockaddr FAR* lpFrom,
LPINT lpFromlen,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
參數
s:一個標識套接口的描述字。
dwBufferCount:lpBuffers數組中WSABUF結構的數目。
lpNumberOfBytesRecvd:如果接收操作立即完成,則為一個指向所接收數據位元組數的指針。
lpFlags:一個指向標誌位的指針。
lpFrom:(可選)指針,指向重疊操作完成後存放源地址的緩衝區。
lpFromlen:指向from緩衝區大小的指針,僅當指定了lpFrom才需要。
lpOverlapped:指向WSAOVERLAPPED結構的指針(對於非重疊套接口則忽略)。
返回值
若無錯誤發生且接收操作立即完成,則WSARecvFrom()函式返回所接收的位元組數。如果連線結束,則返回0。請注意在這種情況下完成指示(啟動指定的完成例程或設定一個事件對象)將早已發生。否則的話,將返回SOCKET_ERROR錯誤,應用程式可通過WSAGetLastError()來獲取相應的錯誤代碼。錯誤代碼WSA_IO_PENDING表示重疊操作成功啟動,過後將有完成指示。任何其他的錯誤表示重疊操作未能成功地啟動,以後也不會有完成指示。
如果設定了MSG_INTERRUPT標誌,則返回值的含義變化。零表示成功,具體含義同上。否則的話,返回值直接包含如下所示的錯誤代碼。由於中斷環境中無法調用WSAGetLastError(),故是必需的。請注意僅適用於Win16環境,僅適用於PROTOCOL_INFO結構中設定了XP1_INTERRUPT位的協定。
錯誤代碼
常見錯誤
WSANOTINITIALISED 在調用本API之前應成功調用WSAStartup()。
WSAENETDOWN 網路子系統失效。
WSAEFAULT lpFromlen參數非法;lpFrom緩衝區太小,無法容納遠端地址。
WSAEINTR 通過WSACancelBlockingCall()函式取消(阻塞)調用。
WSAENETRESET 由於遠端的復位造成連線的中止。
WSAENOTSOCK 描述字不是一個套接口。
WSAESHUTDOWN 套接口已經關閉;一個套接口以SD_RECEIVE或 SD_BOTH的how參數shutdown()後,無法進行WSARecvFrom()調用。
WSAEWOULDBLOCK 重疊套接口:太多重疊的輸入/輸出請求。非重疊套接口:套接口被標誌為非阻塞,但是操作不能立即完成。
WSAEMSGSIZE 訊息太大無法全部裝入指定的緩衝區,故被修剪。
WSAECONNABORTED 由於逾時或其他錯誤導致虛電路中止。
WSAECONNRESET 虛電路被遠端復位。
WSAEDISCON 遠端優雅地中止了連線。
WSA_IO_PENDING 成功啟動一個重疊操作,過後將有完成指示。