複製鏈接
請複製以下鏈接發送給好友

connect()

鎖定
connect()用於建立與指定socket的連接。
頭文件: #include <sys/socket.h>
函數原型: int connect(SOCKET s, const struct sockaddr * name, int namelen);
參數:
s:標識一個未連接socket
name:指向要連接套接字的sockaddr結構體的指針
namelen:sockaddr結構體的字節長度
中文名
connect()
作    用
建立與指定socket的連接
支持協議
TCP
API類型
socket
頭文件
#include <sys/socket.h>
返回值
成功則返回0

connect()作用

connect() 函數用來建立連接,它的原型為 [1] 
int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);  //Linuxint connect(SOCKET sock, const struct sockaddr *serv_addr, int addrlen);  //Windows

connect()參數

定義函數:int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);
sockfd:標識一個套接字。
serv_addr:套接字s想要連接的主機地址和端口號。
addrlen:name緩衝區的長度。

connect()錯誤代碼解釋

定義函數:int connect(int sockfd, struct sockaddr * serv_addr, int addrlen);
EBADF 參數sockfd 非合法socket處理代碼
EFAULT 參數serv_addr指針指向無法存取的內存空間
ENOTSOCK 參數sockfd為一文件描述詞,非socket。
EISCONN 參數sockfd的socket已是連線狀態
ECONNREFUSED 連線要求被server端拒絕。
ETIMEDOUT 企圖連線的操作超過限定時間仍未有響應。
ENETUNREACH 無法傳送數據包至指定的主機。
EAFNOSUPPORT sockaddr結構的sa_family不正確。
EALREADY socket為不可阻塞且先前的連線操作還未完成。

connect()註釋

本函數用於創建與指定外部端口的連接。s參數指定一個未連接的數據報或流類套接口。如套接口未被捆綁,則系統賦給本地關聯一個唯一的值,且設置套接口為已捆綁。請注意若名字結構中的地址域為全零的話,則connect()將返回WSAEADDRNOTAVAIL錯誤。
對於流類套接口(SOCK_STREAM類型),利用名字來與一個遠程主機建立連接,一旦套接口調用成功返回,它就能收發數據了。對於數據報類套接口(SOCK_DGRAM類型),則設置成一個缺省的目的地址,並用它來進行後續的send()與recv()調用。

connect()函數説明

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

connect()返回值

若無錯誤發生,則connect()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程序可通過WSAGetLastError()獲取相應錯誤代碼。對非阻塞套接口而言,若返回值為SOCKET_ERROR則應用程序調用WSAGetLastError()。如果它指出錯誤代碼為WSAEWOULDBLOCK,則您的應用程序可以:
1.用select(),通過檢查套接口是否可寫,來確定連接請求是否完成。
2.如果您的應用程序使用基於消息的WSAAsyncSelect()來表示對連接事件的興趣,則當連接操作完成後,您會收到一個FD_CONNECT消息。

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()時會進行連接。 [2] 

connect()參見

參考資料
  • 1.    何詠明. JAVA中使用Socket通訊的實現[J]. 長江工程職業技術學院學報, 2012, 29(4):35-37.
  • 2.    connect()—建立socket連線  .C語言中文網.2012-04-16[引用日期2014-04-11]