Process與Socket,Select與Accept關係
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);
}
}
相關文章
- 什麼是Socket連線?它與TCP連線有什麼關係TCP
- Hadoop與Spark關係HadoopSpark
- Cookie與Session 關係CookieSession
- Excutors 與 ThreadPoolExcutor 的關係與區別thread
- Docker與containerd的關係與區別DockerAI
- Object與Class的關係Object
- equals與hashCode關係梳理
- GNU與Linux 的關係Linux
- Scala與Java的關係Java
- 從Linux原始碼看Socket(TCP)的acceptLinux原始碼TCP
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- JSON 與 JS 物件的關係JSON物件
- TLS與SSL之間關係TLS
- 圖片與向量的關係
- Java中類與物件的關係與區別Java物件
- 教你理清SpringBoot與SpringMVC的關係Spring BootSpringMVC
- Python與人工智慧的關係Python人工智慧
- this與new、call、apply、bind的關係APP
- tensorflow與python版本對應關係Python
- SkyDrive與OneDrive有什麼關係?
- 如何與上級保持良好關係
- 物聯網與APP的關係?APP
- ARM 與 STM32 的關係
- 原型與原型鏈 - 物件與函式關係筆記原型物件函式筆記
- HTTP、Socket與TCPHTTPTCP
- kubernetes儲存類與PV與PVC關係及實踐
- 關係型資料庫與非關係型資料庫介紹!資料庫
- 深入理解PCA與SVD的關係PCA
- 架構與資料庫的關係架構資料庫
- apache中埠與目錄的關係Apache
- Spring Cloud與Spring Boot版本匹配關係CloudSpring Boot
- Elasticsearch依賴與Spring對應關係ElasticsearchSpring
- RabbitMQ與Erlang的版本對應關係MQ
- ES6與ES2015關係
- 思考 TPS 與 RT 之間的關係
- 大資料與程式語言關係大資料
- quotes屬性與<q>標籤關係
- ABP與DDD領域驅動關係