📅  最后修改于: 2023-12-03 14:48:13.674000             🧑  作者: Mango
Unix套接字是一种可靠的套接字技术,通过网络来传输数据和实现进程间通信,可以有效地提高应用程序的效率和可靠性。在本文中,我们将介绍Unix套接字的帮助程序功能。
getaddrinfo()
这个函数用于将主机名和服务名解析为socket地址。这个函数的实现与网络协议无关,因此适用于所有类型的网络连接。这个函数返回一个指向底层addrinfo
结构的指针,可以将这个结构传递给socket()
和connect()
这些函数。
代码片段:
struct addrinfo hints, *res;
int status;
memset(&hints, 0, sizeof hints); // make sure the struct is empty
hints.ai_family = AF_UNSPEC; // don't care whether IPv4 or IPv6
hints.ai_socktype = SOCK_STREAM; // TCP stream sockets
if ((status = getaddrinfo("www.example.com", "http", &hints, &res)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
exit(1);
}
getnameinfo()
这个函数用于将socket地址解析为主机名和服务名。它与getaddrinfo()
函数相反。这个函数返回一个主机名和服务名的字符串,可以将它们打印到标准输出中。
代码片段:
char host[NI_MAXHOST], service[NI_MAXSERV];
struct sockaddr_in addr;
memset(&addr, 0, sizeof addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_pton(AF_INET, "93.184.216.34", &(addr.sin_addr));
if (getnameinfo((struct sockaddr *)&addr, sizeof addr, host, NI_MAXHOST, service, NI_MAXSERV, 0) != 0) {
fprintf(stderr, "getnameinfo error\n");
exit(1);
}
printf("host: %s, service: %s\n", host, service);
setsockopt()
这个函数用于设置socket的选项,如超时时间、缓冲区大小等。这个函数可以很好地优化网络连接的性能和效率。
代码片段:
int sockfd;
int optval = 1;
socklen_t optlen = sizeof optval;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen) == -1) {
perror("setsockopt");
exit(1);
}
listen()
这个函数用于监听socket,等待客户端的连接。该函数的第2个参数指定队列的最大长度。如果队列已满,将不允许再添加新的连接。
代码片段:
int sockfd, new_fd;
struct sockaddr_in their_addr;
socklen_t sin_size;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof my_addr) == -1) {
perror("bind");
exit(1);
}
if (listen(sockfd, 10) == -1) {
perror("listen");
exit(1);
}
accept()
这个函数用于接受客户端的连接,返回一个新的socket文件描述符。可以使用new_fd
进行通信。
代码片段:
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
} else {
// connection accepted
}
// use new_fd to communicate with the client
Unix套接字提供了一组可靠的套接字技术,可用于网络编程和进程间通信。通过使用上述帮助程序函数,程序员可以更加轻松地操作套接字,提高程序的效率和可靠性。