getsockname和getpeername函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getsockname和getpeername函数相关的知识,希望对你有一定的参考价值。

这2个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址(getpeername)

int getsockname(int sockfd, struct sockaddr* localaddr, socklen_t * addrlen);

int getpeername(int sockfd, struct sockaddr * peeraddr, socklen_t * addrlen);

这2个函数的最后一个参数都是值-结果参数,这就是说,这2个函数都得装填由localaddr和peeraddr指针所指的套接字地址结构

 

需要这2个函数的理由:

1)在一个没有调用bind的TCP客户上,connect成功返回后,getsockname用于返回由内核赋予该连接的本地IP地址和本地端口号

2)在以端口号0调用bind后,getsockname用于返回内核赋予的本地端口号

3)getsockname可用于获取某个套接字的地址簇

4)在一个以通配IP地址调用bind的服务器上,与某个客户的连接一旦建立,getsockname就可以用于返回由内核赋予该连接的本地IP地址

在这样的调用中,套接字描述符参数必须是已连接的本地IP,而不是监听套接字的描述符

 

5)当一个服务器是由调用accept的某个进程通过调用exec执行程序时,它能够获取客户身份的唯一途径就是调用getpeername

 

 

所有客户和服务器都是从调用socket开始,它返回一个套接字描述符

客户随后调用connect

服务器则调用bind、listen、accept

套接字通常使用标准的close函数关闭

大多数TCP服务器都是并发的

它们为每个待处理的客户连接调用fork派生一个子进程

大多数UDP服务器是迭代的

 

以上是关于getsockname和getpeername函数的主要内容,如果未能解决你的问题,请参考以下文章

UNIX网络编程——getsockname和getpeername函数

关于getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果的说明

利用 getsockname 和 getpeername 来获取某一个链接的本地地址和远端地址

套接字之 getsockname && getpeername

io操作-套接字函数/数据打包

requests获取连接的ip