socket心得
结构体socketaddr_in
typedef unsigned short int sa_family_t;
#define __SOCKADDR_COMMON(sa_prefix) sa_family_t sa_prefixfamily
struct sockaddr_in{
__SOCKADDR_COMMON (sin_); /*通信族*/
in_port_t sin_port; /*端口号*/       
struct in_addr sin_addr; /*IP地址*/            
unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; /*令sockaddr_in的大小等于struct sockaddr*/
};
关于getsockopt和setsockopt的参数
第一个参数sockfd:被设置的socket描述符
第二个参数level:socket的层次,传输层,网络层,数据链路层
第三个参数optname:被获取或者设置的名称,例如SO_REUSEADDR
第四个参数*optval:设置或者获取内容的内存地址,例如SO_REUSEADDR,0为不生效,反之生效
第五个参数:*optlen获取内容的长度,optlen设置内容的长度
#include <strings.h>
bzero(sin_zero, sizeof(sin_zero));
memset(sin_zero, 0, sizeof(sin_zero));
#include <arpa/inet.h>
(host to net long)
htonl(INADDR_ANY);
(ascll to interger)
atoi(字符串)
(presentation to numeric)
inet_pton(通信族,IP字符串地址,IP结构体地址);
(numeric to presentation)
inet_ntop(通信族,IP结构体地址,IP字符串地址,IP字符串字节数);
#include <netinet/in.h>
IPPROTO_RAW = 255, &#160; &#160; /* Raw IP packets. &#160;*/
(return inet address)
inet_addr(ip地址字符串);
#include <sys/types.h>
#include <sys/socket.h>
int socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
服务器得到的客户机系统自动分配的连接端口号,与客户端绑定的端口号无关,绑定无意义。