码迷,mamicode.com
首页 > 其他好文 > 详细

socket的相关操作

时间:2018-01-31 20:25:00      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:listen   消息   ddr   sock   fuse   block   cep   code   prot   

1.创建socket:所有的东西在UNIX都是文件 socket系统调用可创建一个socket int socket (int domain, int type, int protocol); domain:告诉系统使用那个底层协议族 type:指定服务类型 1.1服务类型有SOCK_STREAM和SOCK_UGRAM(数据报) 1.内核在2.16.17开始,type可以接逻辑与的参数SOCK_NONBLOCK和SOCK_CLOEXEC来表示soocket是否非阻塞 1.3protocol参数在前两个参数的下,在选择一个具体的协议 调用结果:返回一个socket文件描述符,失败返回-1并且设置errno 2.命名socket 创建的时候,我们只是指定了地址族,但是未指定使用具体的那个socket地址 讲一个socket与socket地址绑定称为socket命名 服务器需要命名socket,客户端不需要 2.1int bind(int sockfd,const struct sockaddr * my_addr,socklen_t addrlen);

bind 成功返回0,失败返回-1并设置errno
2.2 常见的失败有EACCES:被绑定的地址是受保护的,仅仅是超级用户可以访问
EADDRINUSE:被绑定的地址正在使用

3.监听socket、

创建和命名后,是不能直接被客户端访问,需要创建一个监听队列来存放待处理的客户连接

3.1 int listen(int sockfd, int backlog);

backlog参数提示内核监听队列的最大长度

超过之后,就不再受理客户连接

错误消息是ECONNREFUSED

listen唱功返回0,失败返回-1并且设置errno

完整的连接只是backlog+1 个

4.接受连接

int accept(int sockfd,struct sockaddr addr,socklen_t addrlen)

问题:如果有个客户端请求出现网络异常或者掉线,会怎样?
答案:accept只是从监听队列取出来连接,不论连接出于什么状态,更不会关心网络变化

socket的相关操作

标签:listen   消息   ddr   sock   fuse   block   cep   code   prot   

原文地址:http://blog.51cto.com/10725691/2067471

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!