前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >套接口编程

套接口编程

作者头像
用户1154259
发布2018-01-17 18:30:15
4580
发布2018-01-17 18:30:15
举报
代码语言:javascript
复制
 1 struct in_addr{
 2     in_addr_t s_addr;
 3 };
 4 struct sockaddr_in{
 5     uint8_t sin_len;
 6     sa_family_t sin_family;
 7     in_port_t sin_port;
 8  
 9     struct in_addr sin_addr;
10     char sin_zero[8];
11 };

通用套接口地址结构:

代码语言:javascript
复制
struct sockaddr{
    uint8_t sa_len;
    sa_family_t sa_family;
    char sa_data[14];
};
 
int bind(int ,struct sockaddr *,socklen_t);
 
strcut sockaddr_in serv;
bind(sockfd,(struct sockaddr *)&serv,sizeof(serv));

1 进程到内核的传递:bind,connect,sendto

代码语言:javascript
复制
struct sockaddr_in serv;
connect(sockfd,(SA *)&serv,sizeof(serv));

2 内核到进程的传递:accept,recvfrom,getsockname,getpeername

代码语言:javascript
复制
struct sockaddr_un cli;
socklen_t len;
len = sizeof(cil);
getpeername(unixfd,(SA *)&cli,&len);

值-结果参数:

当函数被调用时,结构大小是一个值。当函数返回时,结构大小是一个结果(我靠!这是跟我玩哲学么?)

常用的值-结果参数:

1 select 3个变量

2 getsockopt 长度变量

3 recvmsg msghdr中的两个成员:msg_namelen \ msg_controllen 

4 ifconfig ifc_len

5 sysctl 前两个长度参数

小端字节序:低序字节存储在起始地址

大端字节序

验证大小端字节序:

代码语言:javascript
复制
 1 int main(int argc,char ** argv){
 2 union{ shot s;
 3             char c[sizeof(short)];
 4 }un;
 5 un.s = 0x0102;
 6 printf("%s:",CPU_VENDOR_OS);
 7 if(sizeof(short) ==2){
 8     if(un.c[0]==1 && un.c[1]==2)
 9         printf("big-endian\n");
10     else if(un.c[0]==2 && un.c[1]==1)
11         printf("little-endian\n");
12     else
13         printf("unknown\n");
14 }else{
15     printf("sizeof(short) = %d\n",sizeof(short));
16 }
17 exit(0);
18 }

inet_aton 将字符串转换成32位的网络字节序的二进制值

inet_addr 全为1时,返回INADDR_NONE错误

inet_ntoa 将二进制转换成对应的点分十进制

inet_pton 从表达格式转换到数值格式

inet_ntop 从数值格式转换到表达格式

sock_ntop 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-01-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档