簡述:
創建一個與遠端的連線,交換連線數據,並根據所提供的流描述確定所需的服務質量。#include <winsock2.h>
int WSAAPI WSAConnect ( SOCKET s, const struct
sockaddr FAR * name,
int namelen, LPWSABUF lpCallerData, LPWSABUF
lpCalleeData,
LPQOS lpSQOS, LPQOS lpGQOS );
s:用於描述一個未連線套接口的描述字。
name:欲與套接口連線的遠端名字。
namelen:名字長度。
lpCallerData:指向用戶數據的指針,該數據在建立連線時將傳送到遠端。
lpCalleeData:指向用戶數據的指針,該數據在建立連線時將從遠端傳送回本機。
lpSQOS:指向套接口s流描述的指針,每個方向一個。
lpGQOS:指向套接口組流描述的指針。(如果有套接口組的話)
返回值:
如果無錯誤發生,WSAConnect()返回0。否則的話,將返回INVALID_SOCKET錯誤,應用程式可通過WSAGetLastError()來獲取相應的錯誤代碼。對於阻塞套接口來說,返回值表示連線試圖是否成功。
對於非阻塞套接口來說,連線試圖不一定馬上完成。在這種情況下,WSAConnect()返回SOCKET_ERROR,且WSAGetLastError()返回WSAEWOULDBLOCK. 此時應用程式可以:
1。利用select()函式,通過檢查套接口是否可寫來判斷連線請求是否完成。或者,
2。如果應用程式已使用WSAAsyncSelect()函式來確定對連線事件的興趣,則當連線操作完成時應用程式將收到FD _CONNECT通知。或者,
3。如果應用程式已使用WSAEventSelect()函式來確定對連線事件的興趣,則當連線操作完成時相應的事件對象將設定信號。
對於一個非阻塞套接口來說,在連線試圖完成之前,任何對該套接口的WSAConnect()調用都將以WSAEALREADY錯誤失敗。
如果返回值指出連線試圖失敗(例如WSAECONNREFUSED, WSAENETUNREACH,WSAETIMEDOUT)則應用程式可對該套接口再次調用WSAConnect()函式。
錯誤代碼:
WSANOTINITIALISED 在調用本API之前應成功調用WSAStartup()。
WSAENETDOWN 網路子系統失效。
WSAEADDRINUSE 所指地址已被使用。
WSAEINTR 通過WSACancelBlockingCall()函式中止了阻塞調用。
WSAEINPROGRESS 一個阻塞的WinSock調用正在進行中,或者服務提供者仍在處理一個回調函式。(參見B.3.6.6節)
WSAEALREADY 在所指定的套接口上正在進行一個非阻塞的connect()或WSAConnect()調用。
WSAEADDRNOTAVAIL 本地機器上無法獲得所指定的地址。
WSAEAFNOSUPPORT 所指定地址族中的地址無法與本套接口一起使用。
WSAECONNREFUSED 連線試圖被拒絕。
WSAEFAULT name或namelen參數不是用戶地址空間的一個有效部分;namelen參數太小; lpCalleeData、 lpSQOS和lpGQOS的緩衝區太小;或者lpCallerData的緩衝區太大。
WSAEINVAL 套接口已與一個地址捆綁。
WSAEINVAL 套接口未與一個地址捆綁。
WSAEINVAL s參數為監聽套接口。
WSAEISCONN 套接口已經連線(僅適用於面向連線的套接口)。
WSAENETUNREACH 當前無法從本主機聯繫網路。
WSAENOBUFS 無可用緩衝區,套接口未連線。
WSAENOTSOCK 描述字不是一個套接口。
WSAEOPNOTSUPP lpSQOS和lpGQOS中的流描述無法滿足。
WSAEPROTONOSUPPORT 服務提供者不支持lpCallerData參數。
WSAETIMEDOUT 連線試圖逾時,連線未建立。
WSAEWOULDBLOCK 套接口標誌為非阻塞,連線無法立即完成。當套接口用select()函式設定為讀時,可調用select()。
WSAEACCES 由於setsockopt()時未允許SO_BROADCAST,無法將一個數據報套接口與一個廣播地址連線。
另請參閱:accept(), bind(), connect(), getsockname(),GETSOCKOPT(), socket(), select(),
WSAAsyncSelect(), WSAEventSelect().