linuxrecv阻塞,linux阻塞io
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的操作系统。
相关推荐HOT
更多>>linux内核时钟频率,linux 时钟频率
linux内核时间函数linux内核时间1、一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口...详情>>
2023-11-22 19:03:22python求最大值和最小值输入0结束
**Python求最大值和最小值输入0结束**Python作为一种高级编程语言,具有强大的数据处理能力。其中,求最大值和最小值是Python中常见的操作之一...详情>>
2023-11-17 12:37:32python整除怎么表示
Python整除怎么表示Python是一种高级编程语言,广泛应用于数据分析、人工智能、Web开发等领域。在Python中,整除是一种常见的运算操作。整除是...详情>>
2023-11-17 12:15:10python字符串转换
**Python字符串转换:从基础操作到高级技巧****Python字符串转换**是编程中常用的操作之一。无论是将字符串转换为其他数据类型,还是进行字符串...详情>>
2023-11-17 10:47:22