C/C++网络编程10——I/O复用服务器端实现select方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C/C++网络编程10——I/O复用服务器端实现select方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1390字,纯文字阅读大概需要2分钟。
内容图文
![C/C++网络编程10——I/O复用服务器端实现select方式](/upload/InfoBanner/zyjiaocheng/689/98d2e692505346e29c205b86f2686bce.jpg)
#include <iostream> #include <cstdlib> #include <string> #include <cstring> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/select.h> using namespace std; #define BUF_SIZE 100; void deal_error(string error_msg) { cout << error_msg << endl; exit(1); } int before_socket_accept() { int ser_sock = 0; ser_sock = socket(PF_INET, SOCK_STREAM, 0); if (ser_sock == -1) { deal_error("socket() failed"); return ser_sock; } sockaddr_in ser_addr; ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); ser_addr.sin_port = htons(33333); if (bind(ser_sock, (sockaddr *)&ser_addr, sizeof(ser_addr)) == -1) { close(ser_sock); deal_error("bind() failed"); return -1; } if (listen(ser_sock, 5) == -1) { close(ser_sock); deal_error("listen() failed"); return -1; } return ser_sock; } void accept_connect(int ser_sock) { fd_set reads; FD_ZERO(&reads); FD_SET(ser_sock, &reads); int fd_max = ser_sock; while(true) { fd_set cpy_reads = reads; timeval timeout; timeout.tv_sec = 5; timeout.tv_usec = 500; int fd_num = select(fd_max + 1, &cpy_reads, 0, 0, &timeout); if (fd_num == -1) { break; } else if (fd_num == 0) { continue; } else { for (int i = 0; i < fd_max + 1; i++) { if (FD_ISSET(i, &cpy_reads)) { if (i == ser_sock) { // 连接请求 } else { // } } } } } } int main() { int ser_sock = before_socket_accept(); if (ser_sock == -1) { return 0; } accept_connect(ser_sock); close(ser_sock); return 0; }
内容总结
以上是互联网集市为您收集整理的C/C++网络编程10——I/O复用服务器端实现select方式全部内容,希望文章能够帮你解决C/C++网络编程10——I/O复用服务器端实现select方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。