以下是一个使用非阻塞的域套接字的C语言示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
   int sockfd;
   struct sockaddr_in server_addr;
   char *message = 'Hello, World!';
   int flags;

   // 创建套接字
   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   if (sockfd < 0) {
      perror('socket creation failed');
      exit(EXIT_FAILURE);
   }

   // 设置套接字为非阻塞
   flags = fcntl(sockfd, F_GETFL, 0);
   fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);

   // 设置服务器地址
   server_addr.sin_family = AF_INET;
   server_addr.sin_port = htons(12345);
   server_addr.sin_addr.s_addr = INADDR_ANY;

   // 发送数据
   int ret = sendto(sockfd, message, strlen(message), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
   if (ret < 0) {
      perror('sendto failed');
      exit(EXIT_FAILURE);
   }

   printf('Message sent successfully\n');

   // 关闭套接字
   close(sockfd);

   return 0;
}

在这个示例中,我们首先创建一个非阻塞的域套接字。然后,我们设置服务器地址并使用sendto()函数发送数据。如果sendto()函数卡住了,会返回-1并打印出错误信息。如果成功发送数据,我们会打印出'Message sent successfully'。最后,我们关闭套接字并退出程序。

C语言非阻塞域套接字示例:解决sendto()函数卡死问题

原文地址: https://www.cveoy.top/t/topic/mZVn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录