1
私はこのようなLinuxのUDP
ソケットコードがあります:recvfrom
、ここに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);
は正常に動作し、上記printf
は私がncat
クライアントから送信するものを出力しますすることができます。
しかし、私はselect()
後recvfrom
を入れた場合、以下のコードを参照してください、私はこのソケットにncat
クライアントからのデータを送信するとき、select()
は、戻りません。
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