connect()

connect()

connect()用於建立與指定socket的連線。 頭檔案: #include函式原型: int connect(SOCKET s, const struct sockaddr * name, int namelen); 參數: s:標識一個未連線socket name:指向要連線套接字的sockaddr結構體的指針 namelen:sockaddr結構體的位元組長度

注釋:

本函式用於創建與指定外部連線埠的連線。s參數指定一個未連線的數據報或流類套接口。如套接口未被捆綁,則系統賦給本地關聯一個唯一的值,且設定套接口為已捆綁。請注意若名字結構中的地址域為全零的話,則connect()將返回WSAEADDRNOTAVAIL錯誤。

對於流類套接口(SOCK_STREAM類型),利用名字來與一個遠程主機建立連線,一旦套接口調用成功返回,它就能收發數據了。對於數據報類套接口(SOCK_DGRAM類型),則設定成一個預設的目的地址,並用它來進行後續的send()與recv()調用。

函式說明

connect()用來將參數sockfd 的socket 連至參數serv_addr 指定的網路地址. 結構sockaddr請參考bind(). 參數addrlen 為sockaddr 的結構長度.
返回值:成功則返回0, 失敗返回-1, 錯誤原因存於errno 中. 

返回值:

若無錯誤發生,則connect()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程式可通過WSAGetLastError()獲取相應錯誤代碼。對非阻塞套接口而言,若返回值為SOCKET_ERROR則應用程式調用WSAGetLastError()。如果它指出錯誤代碼為WSAEWOULDBLOCK,則您的應用程式可以:

1.用select(),通過檢查套接口是否可寫,來確定連線請求是否完成。

2.如果您的應用程式使用基於訊息的WSAAsyncSelect()來表示對連線事件的興趣,則當連線操作完成後,您會收到一個FD_CONNECT訊息。

錯誤代碼:

WSAENOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。

WSAENETDOWN:套接口實現檢測到網路子系統失效。

WSAEADDRINUSE:所指的地址已在使用中。

WSAEINTR:通過一個WSACancelBlockingCall()來取消一個(阻塞的)調用。

WSAEINPROGRESS:一個阻塞的套接口調用正在運行中。

WSAEADDRNOTAVAIL:在本地機器上找不到所指的地址。

WSAENOTSUPPORT:所指族中地址無法與本套接口一起使用。

WSAECONNREFUSED:連線嘗試被強制拒絕。

WSAEDESTADDREQ:需要目的地址。

WSAEFAULT:namelen參數不正確。

WSAEINVAL:套接口沒有準備好與一地址捆綁。

WSAEISCONN:套接口早已連線。

WSAEMFILE:無多餘檔案描述字。

WSAENETUNREACH:當前無法從本主機訪問網路。

WSAENOBUFS:無可用緩衝區。套接口未被連線。

WSAENOTSOCK:描述字不是一個套接口。

WSAETIMEOUT:逾時時間到。

WSAEWOULDBLOCK:套接口設定為非阻塞方式且連線不能立即建立。可用select()調用對套接口寫,因為select()時會進行連線。  

參見

accept(), bind(), getsockname(), socket(), select(), WSAAsyncSelect().

相關詞條

相關搜尋

熱門詞條

聯絡我們