socket的相关操作
admin
2023-03-13 22:21:03
0
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只是从监听队列取出来连接,不论连接出于什么状态,更不会关心网络变化

相关内容

热门资讯

海信电视用遥控器关闭后打不开 原因可能是遥控器的电池没有装好或者是没电了,需要重新安装一下电池或者更换新的电池试一试;原因可能是电...
电视机突然没电源打不开了 有可能是电视开关的电源线断了;可能是电视在使用时短路;可能是电源插头插座松动;可能是电视内部零件接触...
电热水器下面那个小龙头漏水是怎... 电热水器下面那个小龙头漏水是怎么回事?1、因为安全阀发生了故障或者是已经被损坏了,就会有漏水的现象;...
回答下电脑桌面一片空白怎么恢复 电脑桌面上如果是一片空白,那说明您的电脑图标被隐藏了,想要恢复就要按照如下的三个步骤去操作才行。 第...
澳总理要找特朗普“理论”关税:... 当地时间7月26日,澳大利亚总理阿尔巴尼斯表示,他将直接向美国总统特朗普提出抗议,反对美国新近宣布的...
正颌手术反成“鞋拔子脸”,医生... 为改善轻微地包天做正颌手术,没想到反成“鞋拔子脸”。据第一现场报道,24岁女孩小雨在接受采访时表示,...
在泰国GMM书展活动中遭锁喉、... 7月25日,一名中国女粉丝在泰国曼谷GMM书展活动中遭工作人员锁喉、抱摔等暴力对待。当事人称随后前往...
中国驻菲律宾大使:过去半年,我... 近日,中国驻菲律宾大使井泉接受看看新闻Knews独家采访,直面仁爱礁、黄岩岛海上争端、中菲关系走向、...
三预警齐发,台风“红霞”减弱为... 中央气象台7月26日10时继续发布台风黄色预警、暴雨红色预警和强对流天气黄色预警。台风黄色预警“红霞...
痛批民进党是台湾的敌人,侯汉廷... 海峡导报综合报道 国民党25日号召支持者上台北凯达格兰大道,举办“我是人、我反毒台”集会游行,主办方...