#include "input_windows.h" void init_wsa(void) { WSADATA wsa; WSAStartup(WINSOCK_VERSION, &wsa); } int windows_read(int fd, char *buffer, int len) { struct timeval tv; fd_set rfd; retry: FD_ZERO(&rfd); FD_SET(fd, &rfd); tv.tv_sec = 0; tv.tv_usec = 200; int rs; int ret; rs = select(fd+1, &rfd, NULL, NULL, &tv); if (errno == EINTR) { goto retry; } if (rs == -1) { // error return -1; } if (rs == 0 ) { return 0; } if (FD_ISSET(fd, &rfd)) { ret = recv(fd, buffer, len, 0); if (ret == 0) { // select, recv = 0: connection closed. return -1; } return ret; } return -1; }