inet_pton

socket编程:SO_REUSEADDR例解

一世执手 提交于 2020-03-02 09:01:18
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而 且很多网友在编写网络程序时也会遇到这个问题。所以特意写了这么一篇文章, 希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很详细的 解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。 首先声明一个问题:当两个socket的address和port相冲突,而你又想重用地 址和端口,则旧的socket和新的socket都要已经被设置了SO_REUSEADDR特性,只 有两者之一有这个特性还是有问题的。 SO_REUSEADDR可以用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1) 1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启 动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。 2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但 每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可 以测试这种情况。 3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。 4、SO

socket编程:SO_REUSEADDR例解

﹥>﹥吖頭↗ 提交于 2020-03-02 09:00:35
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而 且很多网友在编写网络程式时也会碰到这个问题。所以特意写了这么一篇文章, 希望能够解答一些人的疑难。 其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很周详的 解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。 首先声明一个问题:当两个socket的address和port相冲突,而您又想重用地 址和端口,则旧的socket和新的socket都要已被配置了SO_REUSEADDR特性,只 有两者之一有这个特性还是有问题的。 SO_REUSEADDR能够用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1) 1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而您启 动的程式的socket2要占用该地址和端口,您的程式就要用到该选项。 2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但 每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可 以测试这种情况。 3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。 4、SO

组播

天大地大妈咪最大 提交于 2020-01-29 01:06:05
组播 单播只能发给一个接收方,广播发给所有主机,但过多的广播会大量占用网络带宽,造成网络风暴,影响通信。 组播(多播)为折中方式,只有加入某个多播组的主机才能收到数据。 组播的IP地址:224.0.0.1 ~ 239.255.255.254(中间除去广播地址) 组播的发送 1)创建UDP套接字 2)指定目标地址与端口 3)发送数据包 1 /*udp demo */ 2 3 /* usage: 4 * ./client serv_ip serv_port 5 */ 6 #include "net.h" 7 void usage (char *s) 8 { 9 printf ("\nThis is multicast demo!\n"); 10 printf ("\nUsage:\n\t %s serv_ip serv_port", s); 11 printf ("\n\t serv_ip: udp server ip address(between 224~239 segment)"); 12 printf ("\n\t serv_port: udp server port(serv_port > 5000)\n\n"); 13 } 14 15 int main (int argc, char *argv[]) 16 { 17 int fd = -1; 18 int port =

socket inet_pton

心已入冬 提交于 2020-01-23 18:29:27
inet_pton   Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换   而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。   inet_pton函数原型如下[将“点分十进制” -> “整数”]   #include <sys/types.h>   #include <sys/socket.h>   #include <arpa/inet.h>   int inet_pton(int af, const char *src, void *dst);   这个函数转换字符串到网络地址,第一个参数af是地址族,转换后存在dst中   inet_pton 是inet_addr的扩展,支持的多地址族有下列:   af = AF_INET   src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址   转换为in_addr的结构体,并复制在*dst中   af =AF_INET6   src为指向IPV6的地址,,函数将该地址   转换为in6_addr的结构体,并复制在*dst中   如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。   inet