socket知识:

#### 网路与主机字节序:
```
struct sockaddr_in{
    sa_family_t sin_family; //地址族
    u_int16_t sin_port; //端口
    struct in_addr sin_addr;
}
struct in_addr{
    u_sin32_t s_addr; //ipv4网络字节序地址
}

ipv4与网络字节序转换:
    不可重入:返回的是静态内存,连续调用返回值会被覆盖
    inet_addr(),inet_aton() 点分十进制转换为网络字节序
    inet_addr() 与上相反
    
    可重入:
    inet_pton() inet_ntop()
    
注意:使用时,需要强转sockaddr类型
```
#### socket创建
```
#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain,int type,int protocol);
参数:
    domain:协议族
    type:服务类型
```

#### socket命名
```
#include<sys/types.h>
#include<sys/socket.h>
int bind(int sockfd,const struct sockaddr*my_addr,socklen_t addrlen);

注意:客户端不需要命名,服务端需要命名,因为命名才能被连接
```

#### 监听socket
```
创建监听队列,存放客户连接
#include<sys/socket.h>
int listen(int sockfd,int backlog);
参数:
    backlog:半连接和和全连接状态的socket的上限
```
#### 接收连接
```
#include<sys/types.h>
#include<sys/socket.h>
int accept(int sockfd,struct sockaddr*addr,socklen_t*addrlen);

注意:accept只是从监听队列中取出连接,而不论连接处于何
种状态(如上面的ESTABLISHED状态和CLOSE_WAIT状态),更不关
心任何网络状况的变化。
```

#### 读写数据  read write也可以使用,但是socket有专用的读写接口
```
#include<sys/types.h>
#include<sys/socket.h>
ssize_t recv(int sockfd,void*buf,size_t len,int flags);
ssize_t send(int sockfd,const void*buf,size_t len,int flags);
flags参数:flags参数
recv可能返回0,这意味着通信对方已经关闭连接了。recv出错时返回-1并设置errno。
send成功时返回实际写入的数据的长度,失败则返回-1并设置errno。
```

参考:linux高性能服务器编程-游双

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值