从服务器踢一个客户端
答
只是close(2)
文件描述符并停止读取它。
答
术语踢含糊不清。您通常可以通过启用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
显式调用是没有必要的。
但是,如果服务器关闭文件描述符的客户端,客户端将不会终止,直到对服务器的文件描述符进行下一个操作(写入失败时)。当服务器踢他时,我会立即终止客户端 – giozh 2012-08-11 09:34:47
@giozh实际上,当套接字关闭时,客户端的套接字将变得可读,下一次调用read或recv将返回零,这表示一个干净的关闭从另一侧。 – 2012-08-11 09:35:58
@giozh在TCP术语中,没有“踢”之类的东西。你可以只声明你不会再发送任何东西;客户可以*地保持一面开放。 – cnicutar 2012-08-11 09:36:18