¡¾ÇóÖú¡¿Linux IPv6ÍøÂçͨÐÅ
±¾ÈËÕýÔÚ´ÓÊÂIPv6Ñо¿£¬×î½ü±àÁËÒ»¸öLinux IPv6 µÄUDP¿Í»§¶ËºÍ·þÎñ¶Ë³ÌÐò£¬Æä»ù´¡ÊÇÒÔǰ¿ÉÒÔÔËÐеÄv4³ÌÐòÖ®Éϸıà³Év6µÄ¡£ÎÒµÄPC»·¾³ÊÇLinux 2.4.18-20£¬Ö§³ÖIPv6£¬Ö§³ÖIPv4ºÍipv6£¬¾¹ýµØÖ·ÅäÖúó¿ÉÒÔÓëÁíÍâһ̨PCÏ໥pingͨ¡£µ±ÎÒÓñàдµÄ³ÌÐòÔÚһ̨PC»úÉϲâÊÔʱ£¬·þÎñ¶Ë³ÌÐò½ÓÊÕ²»µ½Êý¾Ý£¬µ±ÔÚÁ½Ì¨PC»úÉϲâÊÔʱ£¬³öÏÖÈçÏ´íÎóÐÅÏ¢£º^VR P"L'X*Af#{L!\+Pbind:Cannot assign requested address
ÓÉÓÚ±¾È˶àÄê´ÓÊÂLinuxÈí¼þ¿ª·¢£¬±àдUDPͨѶ³ÌÐòÓ¦¸ÃÊǺܼòµ¥µÄÎÊÌ⣬ÏÖÔÚ³öÏÖÉÏÊöÇé¿ö£¬ÈÃÎÒºÜÀ§»ó£¬²»ÖªÎÊÌâ³öÏÖÔں䦣¿Çë¸÷λÓоÑéµÄ¸ßÊÖÖ¸µãһϣ¬²¢»Ø´ðÏÂÊöÎÊÌ⣬лл£¡| M:~y~r:S(f n
£¨1£©³ýµØÖ·½á¹¹ºÍµØÖ·½âÎöµÄ²îÒìÍ⣬IPv6ºÍIPv4ÔÚÍøÂç±à³Ì·½Ãæµ½µ×ÓÐʲô²îÒ죿GK8G*n}_iO_9\X)w
£¨2£©¼ÈÈ»Äܹ»pingͨ¶Ô·½µÄIPv6µØÖ·£¬µ«ÎªÊ²Ã´»á°ó¶¨´íÎó£¬ÊDz»ÊÇÔÚÅäÖ÷½ÃæÒª×÷ÆäËü¹¤×÷£¿ ºÇºÇ£¬no code no talk
°ïæ·ÖÎöLinux IPv6 ͨѶ´úÂë
·þÎñ¶Ë³ÌÐòÈçÏ£ºc1P ocO#include <sys/types.h>
#include <sys/socket.h>p:QCkTY a
#include <sys/poll.h>8O$Mb-Q+t}3E/]"O;C
#include <sys/ipc.h>
#include <sys/ioctl.h>`$M.Z$u"T^4U0j so
#include <sys/select.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <netinet/in.h> Q|Ep$`!uJ#x
#include <arpa/inet.h>
#include <stdio.h>0}9H;h HH(UX2nqR.r
#include <unistd.h>)R0SWQ|bXc
#include <stdlib.h>,A!^!w/Y S
#include <string.h>
#include <errno.h>Y7t y9_bGF vd~
int main ()F/d$?/R;N;v,n
{
int sock,sockfd;
unsigned char v6[16]; O m Pq6ZY[Za+Y
struct sockaddr_in6 addr,servaddr;
socklen_t fromlen;
char packetbuffer[1024];
int size;*XAphC;A1{(b+W
size_t len;IP N)_M4dE/]u
// create sockets
nH}1Z0A4ln,]/Vp
sock = socket(PF_INET6,SOCK_DGRAM,0);
if (sock == -1)
{5I {gme U E
printf(" create socket error\n");
exit(-1);
}GY,oAi*sKw(DCh#q[0x+K
printf("Create socket 6 =%d\n",sock); J5Dt#q4bA
// bind sockets
memset(&addr,0,sizeof(struct sockaddr_in6));
addr.sin6_family = AF_INET6;-Fb5Y6]h)KN(@4]nVj
addr.sin6_port = htons(9000);
if (inet_pton (AF_INET6, "3ffe:321f::50a", &addr.sin6_addr) <= 0) {"e/k8sh? Iy4[2G
printf ("inet_pton error \n");
exit (3);
}sY v#[s F;J1ZY]
if (bind(sock,(struct sockaddr *)&addr,sizeof(addr)) != 0)
{N jY%i9Z
printf("bind udp6 rtp error!\n");
exit(-1);
}
printf("Wait receive data ....\n");U-s MN^
fromlen = sizeof( struct sockaddr_in6 );[(M&w X7HG:k
//int rcvtimeo = 30000 ; // 45 sec insteadof 45 as default+nj T~w
//setsockopt(sock, SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) );
while(1)
{
int recvlen=0;
recvlen = recvfrom(sock,packetbuffer,1024,0,(struct sockaddr *)&servaddr,&fromlen);
if ( recvlen <0 )
continue;
elsebIH/k x;\!S
{(Kaj5hVj
printf("Receive msg>>%s\n",packetbuffer);
break;
}
}
close(sock);m`)p2hQ8T0O1`fB
return 0;
}
·¢ËͶ˳ÌÐòÈçÏ£º3\@y0NG$K4FL
#include <sys/types.h>9N~Qe B9@n9YH
#include <sys/socket.h>Q,]0d/p|[)[[v
#include <sys/poll.h>$iN,tEC G
#include <sys/ipc.h>|X4S#h]^0C!Tw`b(O
#include <sys/shm.h>