c++11
C++
code posted
by
Adam
created at 20 Dec 04:38, updated at 27 Jun 08:28
Edit
|
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <unistd.h> #include <fcntl.h> #include <sys/select.h> #include <errno.h> #include "Socket.h" int main(int argc, char *argv[]){ // 对 socket 进行了简单的封装,这里实际是创建了一个套接字,同时连接到 127.0.0.1:8001 Socket sock(AF_INET, SOCK_STREAM); sock.connect({"127.0.0.1", 8001}); char buffer[1024]; while(true){ timeval timeout; timeout.tv_sec = 2; timeout.tv_usec = 0; // 设置 fd_set fd_set read_fds; FD_ZERO(&read_fds); FD_SET(sock.fd(), &read_fds); FD_SET(STDIN_FILENO, &read_fds); int max_fd = sock.fd(); // 调用 select int n = select(max_fd+1, &read_fds, nullptr, nullptr, &timeout); if(n == -1){ perror("select"); exit(1); } if(n > 0){ // socket if(FD_ISSET(sock.fd(), &read_fds)){ int len = read(sock.fd(), buffer, sizeof(buffer)); write(STDOUT_FILENO, buffer, len); } // 标准输入 if(FD_ISSET(STDIN_FILENO, &read_fds)){ int len = read(STDIN_FILENO, buffer, sizeof(buffer)); write(sock.fd(), buffer, len); } }else{ printf("no input arrive after %ld sec\n", timeout.tv_sec); } } } |
1.3 KB in 3 ms with coderay