當客戶想要連線到伺服器的時候,它會嘗試在乙個未命名套接字和伺服器的監聽套接字之間建立乙個連線。它們用
connect()
系統呼叫來完成這一工作,它的一般形式是:
int connect(int socket, const struct sockaddr
*address, size_t address_len);
引數socket
指定的套接字將連線到引數
address
指定的伺服器套接字上去,伺服器套接字的長度由引數
address_len
指定。套接字必須是通過
socket
呼叫獲得的乙個有效的檔案描述符。如果操作成功,函式返回
0,否則返回
–1。該函式產生的錯誤**如表
18.4
所示。表
18.4connect()
系統呼叫返回的錯誤** 代
碼 說明
ebadf
檔案描述符無效
ealready
套接字上已經有了乙個正在使用的連線
etimedout
連線超時
econnrefused
連線請求被伺服器拒絕
如果連線不能立刻建立起來,
connect()
會阻塞一段不確定的倒計時時間,這段倒計時時間結束後,這次連線就會失敗。如果
connect()
呼叫是被乙個訊號中斷的,而這個訊號又得到了處理,
connect
還是會失敗,但這次連線嘗試是成功的,它會以非同步方式繼續嘗試。
類似於accept()
呼叫,connect()
的阻塞特性可以用設定該檔案描述符的
o_nonblock
標誌的辦法來改變。在這種情況下,如果連線不能立刻建立起來,
connect()
會失敗並把
errno
變數設定為
einprogress
,而連線將以非同步方式繼續嘗試。
非同步連線的處理是比較困難的,而我們可以在套接字檔案描述符上用乙個
select()
呼叫來表明該套接字已經處於寫就緒狀態。
1837 砝碼稱重
小 q 有 n 個砝碼,它們的質量分別為 1 克 2 克 n 克。他給 i 克的砝碼標上了編號 i i 1,2,n 但是編號被人打亂了,即編號為 i 的砝碼不一定是 i 克,而是 a i 克,這裡 a 指的是 1 到 n 的乙個排列。他有一桿天平,可以向天平的兩側放任意數量的砝碼,通過一次稱量得到兩...
1837 砝碼稱重
1837 砝碼稱重 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 小 q 有 n 個砝碼,它們的質量分別為 1 克 2 克 n 克。他給 i 克的砝碼標上了編號 i i 1,2,n 但是編號被人打亂了,即編號為 i 的砝碼不一定是 i 克,而是 a i 克,這裡...
監聽連線請求
sys listen 函式執行監聽任務,傳遞的兩個引數分別是socket的檔案號和連線數。perform a listen.basically,we allow the protocol to do anything necessary for a listen,and if that works,...