套接字编程在开发者和用户之间的C语言编程中是众所周知和常见的。在这种编程中,我们倾向于连接两个端点。这些端点可以是两个服务器,一个服务器,一个套接字,等等。顾名思义,"getockname "函数被用来获取网络中工作的套接字的名称。它可能是也可能不是套接字的名称,但该特定套接字的地址将通过这个函数显示出来。因此,我们在本指南中尝试了一种简单的方法来说明C语言中的getsockname()函数。让我们重新看看它的例子,同时使用Ubuntu 20.04 Linux系统进行程序操作。
例子:GetSockName函数
让我们来看看C语言中getsockname函数的例子。利用 "Ctrl+Alt+T "快捷键,在屏幕上快速打开命令行程序。这可能只需要10秒钟,你的终端就可以使用了。在终端指令区内,你必须输入 "触摸 "查询和 "文件名",在你的系统中生成一个全新的文件,即空文件。有许多选项可以打开这个新生成的文件,即vim、nano或文本编辑器。用户可能喜欢先在文本编辑器中打开它,创建一个代码,更新或修改代码,然后在shell中执行。这可以通过简单地双击驻留在文件资源管理器的 "主页 "文件夹中的文件名来实现。如果用户想在 "GNU Nano "编辑器中打开这个空文件,他们可以利用终端 "nano "指令。写下这个指令并点击回车键来执行它。创建文件和打开文件的指令都已列出。

C代码开始时包含了一些主要和重要的头文件。关键字 "include "与哈希符号一起使用,以达到这一目的。这里总共使用了11个头文件。stdio.h "被用来获取标准输入和输出。unistd.h "用于访问POSIX操作系统的API,即Linux和类Unix系统。stdlib.h "头文件是一个标准库,用于一般用途,即类型转换、进程管理、存储分配等。errno.h "主要用于错误问题和报告。C语言的 "string.h "模块与其他一些功能一起用于处理字符串。sys/types.h "头文件被用来定义变量的数据类型和我们程序代码中使用的函数。
头文件 "sys/stat.h "在这里用来描述返回信息数据的构造。头文件 "sys/socket.h "将被用来在我们的代码中使用套接字的功能和可变性。"sys/un.h "头文件库在这里用来保存类似Unix的套接字的地址。netint/in.h "是专门用来初始化环回中IPv6地址的可变结构类型的。
INET ADDRSTRLEN或INET6 ADDRSTRLEN变量通常在 "arpa/inet.h "头文件库中定义。在所有头文件之后,我们实现了一个名为 "ShowError "的用户定义的函数,接受一个恒定字符指针 "e "的参数。这个指针参数引用了到目前为止在我们代码中发现的一些错误。对于C语言编程,POSIX错误方法,即perror,被用来根据errno错误条件向 "stderr "显示错误响应信息。它输出 "str "和符合通用可变的errno的错误响应信息,由程序代码决定。perror "函数使用参数 "e "作为错误信息来显示它。exit(1) "函数在这里是为了退出或结束 "ShowError() "函数的时刻。

指针类型的 "sock_addr "函数在这里出现,它的参数中有三个参数。参数 "s "代表套接字,字符型指针变量 "buf "将被用来存储套接字数据。而最后一个参数 "bufsize "是一个 "size_t "类型的对象,将被用来定义缓冲区变量的大小,或者简单地说就是缓冲区。在这个函数中,我们创建了一个名为 "addr "的结构来存储socket地址。addr "变量的长度通过应用 "sizeof "函数被存储在整数类型的变量 "len "中。
getsockname()函数在这里被用来获取一个套接字的名称。这个函数使用套接字、套接字地址和套接字长度作为输入参数。无论getockname函数的响应是什么,该响应将被存储在变量 "z "中,即收集或不收集。这里的 "if "语句是用来检查变量 "z "收到的返回状态码为-1,即false的条件。这意味着,如果你发现自己无法得到一个套接字的名称,它将返回NULL给调用函数。"snprintf "函数用于获取套接字的地址,将其转换为字符串形式,并在shell上显示。为此,必须使用缓冲区和缓冲区大小作为参数。套接字端口的地址在函数 "ntohs "中被利用,将其转换为主机字节码。

main()函数在其参数中需要4个参数。套接字的结构类型地址变量 "addr "与大小为64的字符类型变量 "buf "被声明。然后,我们使用socket函数创建了一个互联网socket Ipv4。这个套接字状态返回代码,它将被保存在变量 "sck_inet "中。如果套接字没有创建成功,比如sck_inet不等于0,它将调用 "ShowError "消息,同时传递给它一个简单的文本 "Socket()"。
在这之后,我们曾试图创建一个 "AF_INET "地址。memset()函数用于将套接字的地址初始化为0,套接字地址族已经被初始化为 "AF_INET",它的端口也被声明,而htons函数在此将主机字节格式转换为网络字节格式。inet_aton函数利用本地IP地址将其转换为标准的字符串格式,并将其保存到套接字地址变量中。地址变量的大小被保存在 "len "变量中。bind()函数将地址与套接字绑定,并将状态返回代码保存在 "z "中。如果状态代码是"-1",即false,它将调用 "ShowError "信息,同时在其中调用bind()函数。如果 "sock_addr() "函数无法被调用,它也会调用以 "sock_addr "为参数的 "ShowError "函数。printf语句显示存储在缓冲区中的名称。

close函数被调用以关闭Ipv4互联网套接字。

经过编译和执行,我们得到了我们的系统所连接的套接字名称。

总结
这篇文章对于每一个急于寻找Linux中 "getsockname "例子的C语言用户来说确实是需要的。我们在本指南中只讨论了一个例子。我们试图为我们的用户简化,因为代码已经被分成了几块。我们希望你会发现这篇文章很有帮助。