这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函数的更多相关文章

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

    UNIX网络编程--getsockname和getpeername函数   来源:网络转载   http://www.educity.cn/linux/1241293.html     这两个函数或者 ...

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

    最近阅读UNIX网络编程第四章时,书本末尾介绍了两个函数getsockname()和getpeername(),可以用于获取服务器端和客户端的IP地址与端口,原本很简单的两个函数,过一眼即明白函数的用 ...

  3. 关于 getsockname、getpeername和gethostname、gethostbyname

    一.gethostname,gethostbyname的用法 这两个函数可以用来获取主机的信息.gethostname:获取主机的名字gethostbyname:通过名字获取其他的信息(比如ip) 1 ...

  4. Socket层实现系列 — getsockname()和getpeername()的实现

    本文主要介绍了getsockname()和getpeername()的内核实现. 内核版本:3.6 Author:zhangskd @ csdn blog 应用层 int getsockname(in ...

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

    在两台计算机上建立一个网络连接,需要五个要素:本机地址 本机端口 协议类型 远端端口 远端地址.那么如何从一个建立好的连接上获取这些信息呢.就需要用到 getsockname  和 getpeerna ...

  6. UNIX网络编程学习(9)--getsockname和getpeername的用法及实例(转)

    getsockname和getpeername #include <sys/socket.h>int getsockname(int sockfd, struct sockaddr *lo ...

  7. getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果

    int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen); getsockname() returns the cu ...

  8. getsockname()和getpeername()

    对于server端: 以端口为通配符方式bind:对于服务器,bind(0,ip),则调用bind函数之后,就可以调用getsockname获取服务器得到的本地端口号 以ip地址为通配地址bind,只 ...

  9. getsockname和getpeername

    int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);  // 获取与某个套接字关联的本地协议地址 i ...

随机推荐

  1. Solr开发参考文档(转)

    Solr开发文档 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索 ...

  2. js中的运算符和条件语句

    js中的运算符大体上可以分为4类:1算术运算符.2一元操作符.3比较运算符.4逻辑运算符. 算术运算符一般指的是加减乘除求余这五种操作符:+,-,*,/,%.通过算术运算符可以对js中的变量进行操作. ...

  3. IE chrome兼容问题

    1.关于display显示和隐藏问题 document.getElementById("id").style.display="";//表示显示 documen ...

  4. 如何理解oracle 11g scan ip

    如何理解oracle 11g scan ip   在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个主机vip ...

  5. Linux设备驱动编程之复杂设备驱动

    这里所说的复杂设备驱动涉及到PCI.USB.网络设备.块设备等(严格意义而言,这些设备在概念上并不并列,例如与块设备并列的是字符设备,而PCI.USB设备等都可能属于字符设备),这些设备的驱动中又涉及 ...

  6. Meth | 安装Linux Mint 18以后grub2 win10启动引导项丢失??!!

    进入mint,打开终端输入:sudo update-grub2

  7. 从零开始写一个Tomcat(叁)--请求解析

    挖坑挖了这么长时间也该继续填坑了,上文书讲到从零开始写一个Tomcat(贰)--建立动态服务器,讲了如何让服务器解析请求,分离servlet请求和静态资源请求,读取静态资源文件输出或是通过URLCla ...

  8. [转] 条件变量(Condition Variable)详解

    http://www.wuzesheng.com/?p=1668 条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法.举个简单的例子,应用程序A ...

  9. (总结)Nginx配置文件nginx.conf中文详解 <转>

    转自 http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_proc ...

  10. redis 多实例配置

    (redis的安装, 配置, 登陆等基础不再多说, 网上很多资料的, 这里只说个人对redis多实例的理解与配置) 我自己使用的redis版本是 2.8.13, 环境是 ubuntu 个人对多实例的理 ...