实现套接字接口以支持IPV6的最佳方法是什么.现有代码仅支持IPV4.现在,为了支持IPV6,我也很少有疑问......
1)_I应该用IPV6 API替换IPV4的所有API.通过AF_INET6说AF_INET,通过sockaddr_in6说sockaddr_in等.这些新API是否支持这两种协议.
2)或者我应该这样保持这种状况......
#ifdef IPV6_SUPPORT
sockaddr_in6 addr;
RTMemoryUtil::memset( &addr, 0, (int)sizeof( addr ) );
addr.sin6_family = AF_INET6;
addr.sin6_port = (unsigned short)htons( port );
RTMemoryUtil::memcpy( &addr.sin6_addr, address, (int)sizeof( *address ) );
#else
sockaddr_in addr;
RTMemoryUtil::memset( &addr, 0, (int)sizeof( addr ) );
addr.sin_family = AF_INET;
addr.sin_port = (unsigned short)htons( port );
RTMemoryUtil::memcpy( &addr.sin_addr, address, (int)sizeof( *address ) );
#endif
Run Code Online (Sandbox Code Playgroud)
请建议是否有更好的方法或第二个过程中的缺陷是什么.
从技术上讲,无论是(1)还是(2),您都应该迁移到与IP系列无关的API,并使用struct sockaddr
而struct sockaddr_storage
不是IPv4和IPv6硬连线结构.史蒂文斯提供了创建不可知API的好例子,这是我采用的类似方法:
http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/sockaddr.c
归档时间: |
|
查看次数: |
4278 次 |
最近记录: |