Process與Socket,Select與Accept關係

wuruixn發表於2020-04-07

Socket只是一個系統函式介面,利用它可對某個埠進行監聽。

Process是在Socket介面監聽某個埠的基礎上建立通訊連線,收發資料並做對應的應用處理,從而形成應用程式。


Socket的英文原義是“孔”或“插座”。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控制程式碼。在Internet上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並繫結到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。


accept與select區別:

一般經過建立套接字socket()繫結bind()以及listen()之後,  就可以呼叫select檢視socket的狀態和 accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)建立一個全新連線;

判斷是否有客戶端發起連結請求,   一般用select(),然後accept()。

應該先select,可以測一下超時。

如果先accept,select就沒必要了。
還有就是select後,可以測一下資源,如果fd用完了,可以等歸還。
直接的accept,發生這事這個連線就丟了。


一般模型如下
初始化 (socket,bind,listen);
while(1)
{
設定監聽讀寫檔案描述符 (FD_*);
呼叫 select;
如果是傾聽套接字就緒 , 說明一個新的連線請求建立
{
建立連線 (accept);
加入到監聽檔案描述符中去 ;
}
否則說明是一個已經連線過的描述符
{
進行操作 (read 或者 write);
}
}


相關文章