1
を書き換えるためにどのように私は私が窓(WinSocks 2.2)に移植していると私は(だけではなく)poll()
のMSの実装に問題を抱えているいくつかのPOSIX
C
コードをしました。WSAPoll fdが::必要性の提案をそれに
私はPOSIX sockets
といくつかの経験を持っているが、私はWinsock2のに非常に新しいです、私はMSDN上の任意の有用なリードを発見していないので、私はここに尋ねる:「でこのサンプルコードと同等の動作をするためにどのように窓?
static int connect_to_addr(char *address, char *port)
{
struct addrinfo hints;
struct addrinfo *addr;
int fd;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_NUMERICHOST;
if (getaddrinfo(address, port, &hints, &addr) != 0) return -1;
fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
if (fd < 0) return -1;
if (connect(fd, addr->ai_addr, addr->ai_addrlen) < 0) return -1;
freeaddrinfo(addr);
return fd;
}
機能connect_to_addr()
だけのように見える2番目のフィールドに何fd
デモのためです。
WSAStartup(...)
...
pollfd cinfd[2];
fds[0].fd = _fileno(stdin); //THIS is probably not supported on win32
fds[0].events = POLLIN;
fds[1].fd = f_connect(some_addr, some_port); //OK
fds[1].events = POLLIN;
while (1) {
res = WSAPoll(fds, 2, -1); //returns 1
if (fds[0].revents & (POLLIN | POLLHUP)) { //fds[0].revents == POLLNVAL !! problem
char buf[1024];
int n, w, i;
n = read(fds[0].fd, buf, 1024);
...
}
if (fds[1].revents & POLLIN) {
char buf[1024];
int n, w, i;
n = recv(fds[1].fd, buf, 1024, 0);
...
}
}
この共通イディオムをWinSockで実装する方法は?提案ありがとう。
さらに、WSAPoll()はVista以降、ws2_32.dllにあります。それはXPの下で動作させる方法は?
[This](http://tangentsoft.net/wskfaq/)が役立つかもしれません。 –