#include
/* see notes */
#include
intconnect
(int sockfd,
const
struct sockaddr *addr, socklen_t addrlen);/*
sockdf:
socket檔案描述符
addr:
傳入引數,指定伺服器端位址資訊,含ip位址和埠號
addrlen:
傳入引數,傳入sizeof(addr)大小
返回值:
成功返回0,失敗返回-1,設定errno
*/
客戶端需要呼叫connect()連線伺服器,connect和bind的引數形式一致,區別在於bind的引數是自己的位址,而connect的引數是對方的位址。connect()成功返回0,出錯返回-1。
對於tcp 套接字,那麼呼叫 connect 函式將激發 tcp 的三次握手過程,而且僅在連線建立成功或出錯時才返回。其**錯返回可能有以下幾種情況:
三次握手無法建立,客戶端發出的 syn 包沒有任何響應,於是返回 timeout 錯誤。這種情況比較常見的原因是對應的服務端 ip 寫錯。
客戶端收到了 rst(復位)回答,這時候客戶端會立即返回 connection refused 錯誤。這種情況比較常見於客戶端傳送連線請求時的請求埠寫錯,因為 rst 是 tcp 在發生錯誤時傳送的一種 tcp 分節。產生 rst 的三個條件是:目的地為某埠的 syn 到達,然而該埠上沒有正在監聽的伺服器(如前所述);tcp 想取消乙個已有連線;tcp 接收到乙個根本不存在的連線上的分節。
客戶發出的 syn 包在網路上引起了"destination unreachable",即目的不可達的錯誤。這種情況比較常見的原因是客戶端和伺服器端路由不通。
connect函式詳解
不得不說,客戶端的connect函式和服務端的accept函式是一對好 如果客戶端沒有去connect,那麼服務端的accept會一直在那裡傻傻地痴痴地等待,我們先來看看connect函式的原型吧 winsock api linkage intwsaapi connect socket s,cons...
網路程式設計 connect函式
1 connect描述 定義函式 int connect int sockfd,struct sockaddr serv addr,int addrlen connect函式通常用於客戶端建立tcp連線。返回值 成功則返回0,失敗返回 1,錯誤原因存於errno中。錯誤 ebadf 引數sockfd...
connect 函式阻塞問題
方法一 採用select 在學習嵌入式linux網路程式設計中,很多同學都發現了乙個問題,那就是呼叫connect函式時,如果服務端關閉,客戶 端呼叫connect 函式時,發現阻塞在那裡,而且利用ctrl c訊號去停止客戶端程式時,需要等待乙個較為長的時間才能響應了,這個時間如果大家 細心會發現,...