1.mystery引入
1)select是一種多路復用io輸入輸出模式,在linux的輸入輸出程式設計中通過select的輪詢機制,發現可用/可讀或可寫的介面。
2)低階socket程式中有乙個共同點:都是基於阻塞式的程式設計方式
3)非阻塞式是函式呼叫時不阻塞,不管函式執行成功與否,都會立即返回。
4)優點:程式效率提公升
5)缺點:返回的結果往往是錯誤的型別碼
6)解決方案:select機制。
2.例項操作
1)基於select模式實現乙個網路echo的服務程式,即客戶端向服務端傳送資訊,伺服器接收到資訊後,再將資訊原樣**給客戶端
2)需要設定select函式
3)若當前有新連線,則加入到客戶端套接字集合,若數量過載,則斷開本次連線,並傳送提示資訊:sorry overload
4)源**
#include #include #include #include #include #include #include #include #include #define server_port 5555
#define queue_length 5
#define buf_size 200
int main(void)
if (setsockopt(server_socket, sol_socket, so_reuseaddr, &yes, sizeof(int)) == -1)
server_addr.sin_family = af_inet;
server_addr.sin_port = htons(server_port);
server_addr.sin_addr.s_addr = inaddr_any;
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero));
if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
if (listen(server_socket, 5) == -1)
printf("listen port %d\n", server_port);
fd_set clientfdset;
int maxsock;
struct timeval tv;
conn_num = 0;
sin_size = sizeof(client_addr);
maxsock = server_socket;
while (1)
}ret = select(maxsock + 1, &clientfdset, null, null, &tv);
if (ret < 0)
else if (ret == 0)
// check every fd in the set
for (i = 0; i < conn_num; i++)
else}}
if (fd_isset(server_socket, &clientfdset))
if (conn_num < queue_length)
else}}
for (i = 0; i < queue_length; i++)
}}
3.mystery注解
1)設定高階socket屬性引數中的應用引數so_reuseraddr,實現位址的可重複利用
2)fd_set(int fd, fd_set *fdset):向檔案描述符集合中增加乙個新的檔案描述符
3)fd_clr(int fd, fd_set *fdset):向檔案描述符集合中刪除乙個檔案描述符
Socket linux網路多路復用IO技術
1.mystery引入 select是一種多路復用io輸入輸出模式,在linux的輸入輸出程式設計中通過select的輪詢機制,發現可用 可讀或可寫的介面。低階socket程式中有乙個共同點 都是基於阻塞式的程式設計方式 非阻塞式是函式呼叫時不阻塞,不管函式執行成功與否,都會立即返回。優點 程式效率...
Socket linux網路多路復用IO技術
1.mystery引入 select是一種多路復用io輸入輸出模式,在linux的輸入輸出程式設計中通過select的輪詢機制,發現可用 可讀或可寫的介面。低階socket程式中有乙個共同點 都是基於阻塞式的程式設計方式 非阻塞式是函式呼叫時不阻塞,不管函式執行成功與否,都會立即返回。優點 程式效率...
Socket linux網路掃瞄程式開發
1.mystery引入 1 系統入侵步驟 系統發現 漏洞探測 漏洞利用 痕跡清除 2 掃瞄器分類 主機與網路掃瞄器 埠服務掃瞄器 服務漏洞掃瞄器 3 tcp埠掃瞄技術分為三種 全連線掃瞄 syn掃瞄以及fin掃瞄 4 udp埠掃瞄技術一般採用icmp報文埠不可達的資訊來識別udp埠是否開放 5 全連...