📄 sktsrvr.cpp
字号:
// sktsrvr.cpp// listen to a socket, and then forward data between it and the tty#include <iostream.h> // cout#include <stdio.h> // printf#include <stdlib.h> // atoi#include <syslog.h> // syslog#include "sockutil.h" // socket funcs#include "datablok.h" // DataBlock#include "str.h" // stringb#define STDIN 0#define STDOUT 1int doit(int argc, char *argv[]){ // positional arguments int listenPort; if (argc < 2) { printf("usage: %s listen-port\n" " once an incoming connection happens, socket data is send to\n" " and received from the terminal\n", argv[0]); return 0; } listenPort = atoi(argv[1]); // wait for an incoming connection fprintf(stderr, "waiting for connection on port %d\n", listenPort); SOCKET listener = listen_socket(listenPort); SOCKET socket = accept_socket(listener); close_socket(listener); fprintf(stderr, "connection received: %s\n", sockInfo(socket).pcharc()); // create a forwarding buffer DataBlock buffer(1024); buffer.setDataLen(1024); // enter forwarding loop for(;;) { SocketSet sockset; sockset.add(socket); sockset.add(STDIN); sockset.blockUntilReadable(); if (sockset.contains(socket)) { // socket -> STDOUT int len = recv(socket, buffer.getData(), buffer.getDataLen(), 0); if (len < 0) { perror("recv"); exit(2); } else if (len == 0) { fprintf(stderr, "connection closed\n"); break; } len = write(STDOUT, buffer.getData(), len); if (len < 0) { perror("write"); exit(2); } } else if (sockset.contains(STDIN)) { // STDIN -> socket int len = read(STDIN, buffer.getData(), buffer.getDataLen()); if (len < 0) { perror("read"); exit(2); } else if (len == 0) { fprintf(stderr, "user typed EOF\n"); break; } len = send(socket, buffer.getData(), len, 0); if (len < 0) { perror("send"); exit(2); } } else { fprintf(stderr, "select() screwed up!\n"); } } close_socket(socket); return 0;}int main(int argc, char *argv[]){ xBase::logExceptions = false; // generally I'm handling them myself socket_lib_init(); try { return doit(argc, argv); } catch (xBase &x) { fprintf(stderr, "unhandled exception: %s\n", x.why()); return 4; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -