千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:济南千锋IT培训  >  技术干货  >  linuxrecv阻塞,linux阻塞io

linuxrecv阻塞,linux阻塞io

来源:千锋教育
发布人:xqq
时间: 2023-11-22 23:51:22

recv是阻塞还是非阻塞的

1、非堵塞socket 则是在执行select的时候,当没有资源的时候堵塞,当有符合资源的时候,返回一个信号,然后程序就可以执行accept、read、write等操作,这个时候,这些操作是马上完成,并且马上返回。

2、非阻塞就是recv/read的时候,要是接收缓冲区有数据我就读完,没有数据我直接带着返回的-1和EGAIN走人,绝不睡觉等待耽误时间。

3、socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

4、recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态,下面是我针对常见的几种网络状态的简单总结。

linux手册翻译——recv(2)

1、recv_()调用通常会返回任何可用的数据,只要拿到数据就会立马返回,最多返回指定缓冲区大小的数据,但是并不会等待到让缓冲区满 ,除非设置了 MSG_WAITALL 标志,见下。

2、如果数据报大于缓冲区,那么缓冲区中只有数据报的前面部分,其他的数据都丢失了,并且recv()函数返回WSAEMSGSIZE错误。

3、到另一个套接字的连接是通过 connect(2) 调用创建的。 连接后,可以使用 read(2) 和 write(2) 调用或 其变体send(2) 和 recv(2) 的来传输数据。 当会话完成时,可以执行 close(2)。

4、有关可用于在单个调用中传输多个数据报的 Linux 特定系统调用的信息,请参阅 sendmmsg(2)。 Linux may return EPIPE instead of ENOTCONN.getaddrinfo(3) 中显示了使用 send() 的示例。

5、recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态。recv函数只是在用户空间定义的。

linuxsocket阻塞如何退出

1、阻塞与非阻塞recv返回值没有区分,都是 0 出错 =0 连接关闭 0 接收到数据大小。

2、方法 用setsockopt设置阻塞超时时间,recvfrom阻塞一段超时后,退出响应其他线程的消息。方法 主线程直接把recvfrom的socket close掉,recvfrom会报错退出。

3、因为TCP是面向连接的协议。如果对方将socket给close掉了,而你还继续往这个socket写数据,就会触发这个信号。因此,建议你在write之前检查一下对方是否已经close掉了这个socket。

4、有两个解决方案,方案如下:在客户端传输结束之后,你可以把流进行关闭,使用socket.shutdownOutput()和socket.shutdownInput()这两个方法,将流关闭掉,对面就可以接收到结束的信号。

5、linux下用ssh登录后退出的方法:在程序中输入exit,如果一次无法退出需要多尝试几次。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

linuxrecv阻塞,linux阻塞io

2023-11-22

python怎么用空格隔开

2023-11-17

python字符串转数字

2023-11-17

最新文章NEW

linux开机自动启动脚本,linux 开机自启动脚本

2023-11-22

python源代码运行

2023-11-17

python求长方形面积代码

2023-11-17

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>