#include #include #define WIN32_LEAN_AND_MEAN #include #include static void fatal(const char * msg) { fprintf(stderr, "%s (%d)\n", msg, WSAGetLastError()); exit(EXIT_FAILURE); } static void socket_init(void) { WORD version; WSADATA data; int rv; version = MAKEWORD(2, 2); rv = WSAStartup(version, &data); if (rv) fatal("wsastartup"); if (LOBYTE(data.wVersion) == 2 || HIBYTE(data.wVersion) == 2) return; WSACleanup(); fatal("winsock version problem"); } static void socket_deinit(void) { WSACleanup(); } int main(int argc, char * argv[]) { fd_set read; fd_set write; SOCKET rfd; SOCKET wfd; int rv; char buf[4096]; socket_init(); rfd = (SOCKET) GetStdHandle(STD_INPUT_HANDLE); wfd = (SOCKET) GetStdHandle(STD_OUTPUT_HANDLE); for (;;) { FD_ZERO(&read); FD_ZERO(&write); FD_SET(rfd, &read); //FD_SET(wfd, &write); rv = select(max(rfd, wfd) + 1, &read, &write, NULL, NULL); if (rv < 0) fatal("select < 0"); if (rv == 0) continue; fprintf(stderr, "working\n"); fflush(stderr); if (FD_ISSET(rfd, &read)) { rv = recv(rfd, &buf, sizeof(buf), 0); if (rv < 0) fatal("recv < 0"); buf[0] = buf[0] + 3; rv = send(wfd, buf, rv, 0); if (rv < 0) fatal("resend < 0"); } if (FD_ISSET(wfd, &write)) { } } socket_deinit(); return 0; }