socket 之阻塞与非阻塞

套接子的阻塞与非阻塞

阻塞:

在未完成当前任务时,不会去处理其他任务。例如当一个函数在执行接收数据时,只要数据未接收完,它就会一直等待接收下去,不会执行其他的操作。

非阻塞:

在未完成一个任务时,可以停止该项任务,进行下一步的操作。例如socket服务端在等待客户端的连接时,若有客户端请求连接,则与之连接。若没有客户端的请求,服务端就会去做其他的事情,而不会一直等待。

默认情况下tcp套接字处于阻塞模式,可是调用setblocking(0)或者setblocking(1)将套接字改为非阻塞模式或阻塞模式。

如下代码:

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setblocking(0) #非阻塞模式
s.settimeout(0.5)#超时时间
s.bind((h,p))...
时间: 2024-11-06 19:04:31

socket 之阻塞与非阻塞的相关文章

socket阻塞与非阻塞,同步与异步、I/O模型,select与poll、epoll比较

1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个异步过程调用发出后,调

socket阻塞与非阻塞,同步与异步、I/O模型

socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对

面向连接的socket数据处理过程以及非阻塞connect问题

对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听.此时服务器socket允许客户端进行连接,backlog提示没被accept的客户连接请求队列的大小,系统决定实际的值,最大值定义为SOMAXCONN在头文件<sys/so

socket recv阻塞与非阻塞error总结

recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态,下面是我针对常见的几种网络状态的简单总结. 首先阻塞接收的recv有时候会返回0,这仅在对端已经关闭TCP连接时才会发生.      而当拔掉设备网线的时候,recv并不会发生变化,仍然阻塞,如果在这个拔网线阶段,socket被关掉了,后果可能就是recv永久的阻塞了.      所以一般对于阻塞的socket都会用setsockopt来设置recv超时. 

【转载】socket阻塞与非阻塞,同步与异步、I/O模型

转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任

socket编程的同步、异步与阻塞、非阻塞示例详解

socket编程的同步.异步与阻塞.非阻塞示例详解之一 分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点.本节将简要对其一一进行介绍. 一.同步阻塞模式在这个模式中,用户空间的应用程序执行一个系统调用,并阻塞,直到系统调用完成为止(数据传输完成或发生错误). /* * \brief * tcp client */ #include <stdio.h> #include <stdlib

Socket编程中,阻塞与非阻塞的区别

阻塞:一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到来.这个行为叫阻塞.accept()方法将会阻塞服务器线程直到一个呼叫到来.当5个连接处理完闭之后,服务器退出.任何的在队列中的呼叫将会被取消. 非阻塞:非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回.比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,

win32 socket阻塞与非阻塞函数及设置

win32 socket中有些函数是默认阻塞的,比如accept(),send(),recv()等等,其中send()与recv()的阻塞概念与accept()的阻塞概念不同. send()与recv()只是完成数据的拷贝工作,即send()函数仅仅是将数据放到发送缓冲区中,至于实际的发送工作由网络协议完成:recv()函数仅仅是从接收缓冲区中读取数据,实际接收数据的操作由网络协议完成.send()的阻塞主要由发送数据填满发送缓冲区产生的,recv()的阻塞则是由接收缓冲区中没有数据可读引起的.

socket 由浅入深 系列函数(五)socket 阻塞 与 非阻塞

socket 阻塞 与 非阻塞 author:songyanwu 1 概念理解 其实在我们在进行网络编程,在理解阻塞与非阻塞同时,还应该清楚同步与异步! 同步与阻塞 同步和阻塞是不同的,可是有时候在理解有会很模糊: 同步:事情一件件的做,做完一件返回一件,做不完不回复也不返回. 阻塞;  阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行).函数只有在得到结果之后才会返回. 说明:同步和阻塞 在以后接触内核驱动 的时候会