12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #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;
- }
|