什么叫套接字超时~

 对于一个套接字的读写(read/write)操作默认是阻塞的,如果当前套接字还不可读/写,那么这个操作会一直阻塞下去,这就叫套接字超时;  这样对于一个需要高性能的服务器来说,是不能接受的。所以,可以在进行读写操作的时候可以指定超时值,这样就读写操作就不至于一直阻塞下去。  在涉及套接字的I/O操作上设置超时的方法有三种:  1:调用alarm,它在指定的超时期满时产生SIGALRM信号。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。  2:在select中阻塞等待I/O(select有内置的时间限制),依次代替直接阻塞在read或write调用上。(linux2.6以后的内核也可以使用epoll的epoll_wait)  3:使用较新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项。这个方法的问题在于并非所有的实现都支持这两个套接字选项。
时间: 2024-08-18 22:22:50

什么叫套接字超时~的相关文章

Python网络编程——设定并获取默认的套接字超时时间

Sometimes,you need to manipulate the default values of certain properties of a socket library, for example, the socket timeout. 设定并获取默认的套接字超时时间. 1.代码 1 import socket 2 3 4 def test_socket_timeout(): 5 s = socket.socket(socket.AF_INET, socket.SOCK_STR

python设定并获取默认的套接字超时时间

当需要处理socket库某些属性的默认值,例如套接字超时时间.你可以创建一个套接字对象实例,调用settimeout()法设定一个超时时间,在调用gettimeout()方法获取默认的超时时间,.这种操作在开发服务器应用时很有用. 技术点解析: 1.定义socket_timeout()函数,注意函数缩进格式. 2.socket库中的类函数创建一个套接字对象 使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)首先创建了一个套接字对象socket()

Socket编程实践(9) --套接字IO超时设置方法

引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(SIGALRM, sigHandlerForSigAlrm); alarm(5); int ret = read(sockfd, buf, sizeof(buf)); if (ret == -1 && errno == EINTR) { // 超时被时钟打断 errno = ETIMEDOUT;

Java网络编程从入门到精通(16):客户端套接字(Socket)的超时

客户端套接字的超时(timeout)就是指在客户端通过Socket和服务器进行通讯的过程中,由于网络延迟,网络阻塞等原因,造成服务器并未及时响应客户端的一种现象.在一段时间后,客户端由于未收到服务端的响应而抛出一个超时错误; 其中客户端所等待的时间就是超时时间. 由于生产超时错误的一端都是被动端:也就是说,这一端是在接收数据,而不是发送数据.对于客户端Socket来说,只有两个地方是在接收数据:一个是在连接服务器时;另一个是在连接服务器成功后,接收服务器发过来的数据时.因此,客户端超时也分为两种

Unix网络编程 高级IO套接字设置超时

我们知道,对于一个套接字的读写(read/write)操作默认是阻塞的,如果当前套接字还不可读/写,那么这个操作会一直阻塞下去,这样对于一个需要高性能的服务器来说,是不能接受的.所以,我们可以在进行读写操作的时候可以指定超时值,这样就读写操作就不至于一直阻塞下去. 在涉及套接字的I/O操作上设置超时的方法有三种: 1:调用alarm,它在指定的超时期满时产生SIGALRM信号.这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用. 2:在select中阻

套接字I/O超时设置的方法

用select实现超时 1.read_timeout函数封装 2.write_timeout 3.accept_timeout 4.connect_timeout 套接字I/O超时设置方法 1.ararm 第一种: SIGALRM void handler(int sig) { return 0; } signal(SIGLRM,handler); alarm(5); int ret =read(fd,buf,sizeof(buf)); if(ret== -1&&errno == EINE

[解决]通常每个套接字地址只允许使用一次

我们在做socket的开发的时候,经常会遇到这个错误:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次 错误指示很明确:通信端口被占用了,导致通信无法进行. 但为什么端口被占用了呢?什么端口被占用了? 这里其实有一个大前提:你的程序中有没有指定socket通信端口? 如果指定了,解决办法很简单,每次通信完成手动释放就行了.下次通信重新建立连接. 如果没有指定,说明以下几点(可能你命中的是其中一点): 1.你的服务器开启的端口数太少: 2.连接释放等待时间太长: 3.你的socket通信

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

进程间通信(10) - 网络套接字(socket)[2]

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686). 在前一篇文章中(点此链接),已经介绍了socket(),bind(),listen(),connect(),accept()这些函数. 至此,服务器与客户机已经建立好了连接.可以调用网络I/O进行读写操作了,即实现网络中不同进程之间的通信.网络I/O操作有下面的几组函数: · read() / write() · readv() / writev() · send() /