1
我的Linux UDP
插座这样的代码:Linux UDP套接字:select()没有通知?
//create the UDP socket and bind to a local port 5001
//sockfd = socket(AF_INET, UDP, 0);
//bind(sockfd, .., ...);
recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&remote_addr, &addrlen);
printf("%s\n", buffer);
在这里,recvfrom
工作正常,并且printf
上面可以打印我从ncat
客户端发送。
但如果我select()
后把recvfrom
,见下面的代码,select()
不会返回,当我从ncat
客户端发送数据到这个插座。
max_fd = 0
FD_ZERO(&read_set);
FD_SET(sockfd, &read_set);
while (1) {
i = select(max_fd + 1, &read_set, NULL, NULL, NULL); //==> !!! select() is not returned from ncat sent data to this socket
if (i < 0 && errno != EINTR) {
.............
}
for (current_fd = 0; current_fd <= max_fd; current_fd++){
if (!FD_ISSET(current_fd, &read_set))
continue;
nbytes = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr *)&remote_addr, &addrlen);
printf("%d bytes received \n", nbytes);
}
}
这是'C'或'C++',我想'C'但我宁愿不承担。 –
您需要每次在循环中恢复read_ste。 – EJP