从服务器踢一个客户端

从服务器踢一个客户端

问题描述:

有一种简单的方法来在发生超时时从服务器踢出客户端?插座是TCP从服务器踢一个客户端

只是close(2)文件描述符并停止读取它。

+0

但是,如果服务器关闭文件描述符的客户端,客户端将不会终止,直到对服务器的文件描述符进行下一个操作(写入失败时)。当服务器踢他时,我会立即终止客户端 – giozh 2012-08-11 09:34:47

+1

@giozh实际上,当套接字关闭时,客户端的套接字将变得可读,下一次调用read或recv将返回零,这表示一个干净的关闭从另一侧。 – 2012-08-11 09:35:58

+2

@giozh在TCP术语中,没有“踢”之类的东西。你可以只声明你不会再发送任何东西;客户可以*地保持一面开放。 – cnicutar 2012-08-11 09:36:18

术语含糊不清。您通常可以通过启用SO_LINGER选项(超出0)来强制服务器TCP堆栈重置连接,然后关闭套接字。下面的例子(没有错误检查)。

struct linger lo = { 1, 0 }; 
setsockopt(sock, SOL_SOCKET, SO_LINGER, &lo, sizeof(lo)); 
shutdown(sock, SHUT_RDWR); 
close(sock); 

,如果你有一定的sock没有被复制到shutdown显式调用是没有必要的。