C语言非阻塞域套接字示例:解决sendto()函数卡死问题
以下是一个使用非阻塞的域套接字的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'。最后,我们关闭套接字并退出程序。
原文地址: https://www.cveoy.top/t/topic/mZVn 著作权归作者所有。请勿转载和采集!