如果小于零代表发生错误,需要关闭套接字
[3]返回值等于0时,表示连接断开,需要关闭socket。 阻塞和非阻塞的处理方式是一样的,只有返回值小于0时,才能判断errno的值,否则errno的值是无效的。 4.accept accept之后会返回一个新的socket,注意要看情况给这个socket设置相关的选项。 5.select、epoll [1]select(maxfd + 1, &rfd, &wfd, NULL, &timeout)...
不管文件描述符是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;第三 ,timeout的值大于0,这就是等待的超时时间,即 select在timeout时间内阻塞, 超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,返回值同上述。 返回值: 负值:select错误 正值:某些文件可读写或出错 0:等待超时,...
//在超时时间之内,发生可读事件,返回值为1 //select调用失败返回小于0,若小于0是由信号中断的话(errno == EINTR),则继续调用select do { ret = select(fd +1, &read_fdset, NULL, NULL, &timeout); }while(ret < 0 && errno == EINTR); if (ret == 0 ) { ret = -1; errno = ETIMEDOUT;...
timeout:设置select的超时时间,如果设置为NULL则永不超时; select函数的返回值是就绪描述符的数目,超时时返回0,出错返回-1;structtimeval{longtv_sec;//秒longtv_usec;//微秒};voidFD_ZERO(fd_set*set);//清空集合voidFD_CLR(intfd,fd_set*set);//将给定的描述符从文件中删除intFD_ISSET(intfd,fd_set...
当select返回的时候,rset位都将被置0,除了那些有变化的fd位。当发生如下情况时认为是可读的:socket的receive buffer中的字节数大于socket的receive buffer的low-water mark属性值。(low-water mark值类似于分水岭,当receive buffer中的字节数小于low-water mark值的时候,认为socket还不可读,只有当receive buffer中的...
分析shutdown和closesocket的行为(behavior):closesocket或shutdown(使用 SD_SEND当作参数时),会向通信对方发出一个fin包,而此时套接字的状态会由ESTABLISHED变成FIN_WAIT_1,然后对方发送一个 ACK包作为回应,套接字又变成FIN_WAIT_2,如果对方也关闭了连接则对方会发出FIN,我方会回应一个ACK并将套接字置为 TIME_...
这个参数使select处于三种状态:(1)timeout传入NULL,则select一直等到文件状态有变化时才返回,这段时间一直处于阻塞状态。(2):timeout传入0,则select会立即返回(非阻塞),如果文件状态有变化则返回一个大于0的值没有变化则返回0;(3)timeout传入一个大于0的数,则select在timeout时间内阻塞,一旦文件状态有变化就会...
struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(filedescriptor),即文件句柄。fd_set集合可以通过一些宏由人为来操作。 三个fd_set分别监视文件描述符的读写异常变化,如果有变化,select会返回一个大于0的值。如果没有变化,则在timeout的时间后select返回0,若发生错误返回负值。可以传入NULL值,表示不...
4、如果client关闭连接,server端的select并不出错(不返回-1,使用select对唯一一个socket进行non- blocking检测),但是写该socket就会出错,用的是send.错误号:ECONNRESET.读(recv)socket并没有返回错误。 5、该错误被描述为“connection reset by peer”,即“对方复位连接”,这种情况一般发生在服务进程较客户进程提前...