close()和shutdown()函数】的更多相关文章

close函数首先是将传入的socket句柄引用数减1(因为fork进程时会导致socket句柄被多个进程引用),待到引用数等于0的时候,close才会真正关闭连接. shutdown函数是立刻关闭连接(忽视句柄引用数值),关闭有三种方式 SHUT_RD 关闭调用进程的读通道,调用进程立刻不能读网络数据,读缓冲里的数据会被清空 SHUT_WR 关闭调用进程的写通道,调用进程立刻不能写网络数据,写缓冲里的数据立刻会被发送出去 SHUT_RDWR 关闭整个连接 close和shutdown函数…
终止网络连接的通常方法是调用close函数.不过close有两个限制,却可以使用shutdown来避免. close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口.使用shutdown可以不管引用计数就激发TCP的正常连接终止序列(由FIN开始的四个分节). close 终止数据传送的两个方向:读和写.既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍有数据要发送给我们.下图展示了这样的情况下典型的函数调用. #include <sys/socket.h…
一·close(int sockfd) 当server和client建立连接,server调用close(),则server发送fin给client,server不在通过该套接字继续传送消息或者接收消息,此时client调用read,如果接收到fin则返回0,但是此时的client还是可以write给server,并且write只是将信息发送给缓冲区,当server收到该数据报会返回一个rst数据报连接重置,表示server不再接受消息,如果要传送消息,则需要连接重置.client接收到RST后…
linux网络编程之socket(十):shutdown 与 close 函数的区别  http://blog.csdn.net/yijiu0711/article/details/17349169 socket中关闭套接字的函数close和shutdown区别 #include <unistd.h> int close(int fd); close 关闭了自身数据传输的两个方向.关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个s…
#include<sys/select.h> #include<sys/time.h> int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const timeval *timeout); *timeout: 1,NULL,永远等待:2,等待固定时间(tv_sec,tc_usec):3,不等待(tv_sec=tc_usec=0) struct timeval{ long tv_sec;…
#include <sys/socket.h> int shutdown(int sockfd, int howto); 返回:若成功则为0,若出错则为- (1)该函数的行为依赖于howto参数的值: SHUT_RD   关闭连接的读这一半:套接字中不再有数据可接收,而且套接字接收缓冲区中的现有数据都被丢弃 SHUT_WR  关闭连接的写这一半:不再发送数据,而且套接字发送缓冲区中的现有数据都被丢弃 SHUT_RDWR  现有的读半部和写半部都被关闭 (2)调用shutdown关闭一半TCP连…
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而server收到数据后应答一个RST段,表示服务器已经不能接收数据,连接重置,client收到RST段…
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而server收到数据后应答一个RST段,表示服务器已经不能接收数据,连接重置,client收到RST段…
1.close()函数 int close(int sockfd); //返回成功为0,出错为-1 close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字不能再由close的调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终止序列. 在多进程并发服务器中,父子进程共享着套接字,套接字描述符引用计数记录着共享着的进程个数,当父进程或某一子进程close掉套接字…
linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 <span style="font-size:13px;">#include<unistd.h> int close(int sockfd);     //返回成功…