解决time_wait强制关闭socket

解决time_wait
今天我在测试代码的时候,边开边看电影,服务端的CPU消耗和内存使用让我挺满意的

可是过了一会,在统计达到了一定连接后,后来连接很多无法登陆。象上公交车,拥

挤不堪无法上车,用netstat -an查看了下连接状态,time_wait状态的端口非常多

原因就在此了,消耗完系统的端口数,服务端将就无法接收新连接,找到问题就来说明

time_wait,这个东西默认存活时间为2分钟,够长的,这点很要命,更多的大家百度下

对付这个问题,我写了一个函数,强制关闭socket,代码环境{delphi7+windows xp}
PS:只会点pascal,其他不熟。

function ForceCloseSocket(DestSock:TSocket):Boolean;
var
  NoWait:Boolean;
  NLinger:Tlinger;
begin
  Result:=False;
  NoWait:=False;
  if SetSockOpt(DestSock,SOL_SOCKET,SO_DONTLINGER,@NoWait,sizeOf(Boolean))=SOCKET_ERROR then
    Result:=False;
  NLinger.l_onoff:=1;
  NLinger.l_linger:=0;  
  if SetSockOpt(DestSock,SOL_SOCKET,SO_LINGER,@NLinger,sizeOf(NLinger))=SOCKET_ERROR then
    Result:=False else Result:=True;
  if CloseSocket(DestSock)=SOCKET_ERROR then Result:=Flase else Result:=True;
end;

Dz编辑器真是头大,麻烦,这个是强制关闭函数,一点心得,与大家分享下,欢迎PM消息批评指正。

(0)

相关推荐

  • 解决time_wait强制关闭socket

    解决time_wait 今天我在测试代码的时候,边开边看电影,服务端的CPU消耗和内存使用让我挺满意的 可是过了一会,在统计达到了一定连接后,后来连接很多无法登陆.象上公交车,拥 挤不堪无法上车,用netstat -an查看了下连接状态,time_wait状态的端口非常多 原因就在此了,消耗完系统的端口数,服务端将就无法接收新连接,找到问题就来说明 time_wait,这个东西默认存活时间为2分钟,够长的,这点很要命,更多的大家百度下 对付这个问题,我写了一个函数,强制关闭socket,代码环境

  • 如何在c语言下关闭socket

    c语言关闭socket的两种方式 一.shutdown() #include<sys/socket.h> int shutdown(int sockfd,int how); how的方式有三种分别是 SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作.不允许接受. SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作.不允许发送. SHUT_RDWR(2):关闭sockfd的读写功能.不允许发送和接受(和 close() 一样

  • Java通过关闭Socket终止线程

    本文实例为大家分享了Java关闭Socket实现终止线程的具体代码,供大家参考,具体内容如下 package Threads; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; /** * Created by Frank */ public class StopClose extends Thread { pro

  • C#实现强制关闭当前程序进程

    /// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID /// </summary> /// <param name="command"></param> /// <returns></returns> public static string RunCmd(string command) { //實例一個Process類,啟動一個獨立

  • 快速解决pyqt5窗体关闭后子线程不同时退出的问题

    用pyqt5设计了一个主窗体,在窗体运行时需要把一个无限循环放在一个线程去工作.运行后,发现通过鼠标按主窗体的关闭按键关闭主创体后,线程不会自动终止,依然在运行.尽管对我的使用场景来说,这不是问题,因为立马就关机了.但在调试阶段就恨繁,因为后台线程很占资源.怎么能让主窗体关闭是子线程也退出呢?百度了许久,很多方法都不行. 主要试过的有: 1.设置:self.thread.Daemon=True 2.在子线程设置一个变量,通过改变变量的值使循环不满足条件,自动结束 3.设置析构函数 还有别的奇葩.

  • 浅谈python中真正关闭socket的方法

    close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么在close之前使用shutdown方法 shut_rd() -------关闭接受消息通道 shut_wr()--------关闭发送消息通道 shut_rdwr()-------连个通道都关闭 使用:在close()之前加上shutdown(num)即可  [shut_rd(), shut_wr(), shut_rdwr()分别代表num 为0  1  2 ] (但是测试过close()关闭,发现如果关闭后,那么ac

  • 在python中实现强制关闭线程的示例

    如下所示: import threading import time import inspect import ctypes def _async_raise(tid, exctype): """raises the exception, performs cleanup if needed""" tid = ctypes.c_long(tid) if not inspect.isclass(exctype): exctype = type(e

  • 如何解决mysql无法关闭的问题

    mysql关闭不了的解决办法: 右键点击电脑的任务栏,打开任务管理器 点击服务,找到mysql服务 右键点击该服务,选择停止就可以了 内容扩展: mac系统mysqld进程无法kill掉的问题 mac安装比linux恶心的太多,权限太受限制 kill -9根本无法杀死mysqld进程,查了好久原来是因为 LaunchDeamons定时任务守护mysqld进程 解决方法: sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.

  • VBS 强制关闭Symantec Endpoint Protection的代码

    使用这个脚本,可以随时让它歇下来.当然也可以让它继续工作.前提是,你必须是本机管理员.这个脚本使用一各很过时的终止程序方法:ntsd.exe -c q -p ProcessID.所以以前有过一个bat版,之所以用VBS是因为效率高一点,而且没有太多的黑色窗口.主要思想是:循环终止程序+停止服务 代码如下: 复制代码 代码如下: 'On Error Resume Next' 检查操作系统版本Call CheckOS()Call MeEncoder() ' 程序初始化,取得参数If WScript.

  • 解决python web项目意外关闭,但占用端口的问题

    问题描述 因为项目强制关闭,但是服务还在运行,导致重新运行项目时候 提示地址已经使用(端口被占用) /usr/bin/python3.5 python-login-demo/index.py http://0.0.0.0:8080/ Traceback (most recent call last): File "/var/www/git/mine/python-login-demo/index.py", line 64, in <module> application.r

随机推荐