c++ recv函数非阻塞如何设置

avatar
作者
猴君
阅读量:0

在C++中,可以使用fcntl函数或者ioctl函数来设置recv函数为非阻塞模式。下面是一个简单的示例代码:

#include  #include  #include  #include   int main() {     int sockfd;     struct sockaddr_in serverAddr;          // 创建socket     sockfd = socket(AF_INET, SOCK_STREAM, 0);     if (sockfd < 0) {         std::cerr << "Error creating socket" << std::endl;         return -1;     }          // 设置recv函数为非阻塞模式     int flags = fcntl(sockfd, F_GETFL, 0);     fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);          // 连接服务器     serverAddr.sin_family = AF_INET;     serverAddr.sin_port = htons(8080);     serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");          if (connect(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {         std::cerr << "Error connecting to server" << std::endl;         return -1;     }          // 使用非阻塞recv函数接收数据     char buffer[1024];     int bytesReceived = recv(sockfd, buffer, sizeof(buffer), 0);     if (bytesReceived < 0) {         std::cerr << "Error receiving data" << std::endl;     } else {         std::cout << "Received " << bytesReceived << " bytes: " << buffer << std::endl;     }          close(sockfd);          return 0; } 

在上面的代码中,通过fcntl函数将socket设置为非阻塞模式,然后调用recv函数进行接收数据。如果没有数据可接收,recv函数将立即返回,不会阻塞等待数据到达。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!