gpt4 book ai didi

Linux UDP 套接字 : select() is not notified?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:10 26 4
gpt4 key购买 nike

我有这样的 Linux UDP 套接字代码:

//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 客户端发送的内容。

但是如果我把 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 );
}
}

最佳答案

while (1) {
FD_ZERO(&read_set);
FD_SET(sockfd, &read_set);
i = select(max_fd + 1, &read_set, NULL, NULL, NULL);
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 );
}
}

关于Linux UDP 套接字 : select() is not notified?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com