当多个客户端连接到服务器端后,中间由于网络问题,客户端的数据迟迟不能发送到数据端,这个时候,服务器判断,当一定的时间某一个客户端的数据还没有传递上来,就closesocket()掉该创建的套接字,但运行中发现,下次该客户端连接服务器端的socket值一直不断的增加,(也就是说:多个客户端一定的时间都没有传递上来数据,那么就closesocket()多个已经建立的socket,等到多个客户端再与服务器端建立socket连接的时候,发现socket的id值就增加了)。
我想前面的closesocket()好像没有起到关闭的作用?
我想前面的closesocket()好像没有起到关闭的作用?
connected_skt=accept(skt,(struct sockaddr *)&clientaddr,&Len);
上面是服务器端接收到一个客户端(假如只有一个客户端)的链接信息,建立一个SOCKET。
假如这个客户端一定时间没有通讯,那么,我就
closesocket(connected_skt);请问我这样做对吗?
谁告诉你客户1的socket被断开后,客户1再连接上来的socket的id就一定和原来的一样的?socket的分配是系统自动分配的,同一时间也不是同一个程序接收或向外连接而要系统分配socket,socket被断开后也要在一定时间系统才会释放掉资源和可以再重新使用。先补习下些基础知识吧。
再连接,那么系统分配的socket的值是476,
那么这个时候,465什么时候才能得到应用?
=======================================
我现在发现的问题是多个客户端端连接到服务器端后,当每个客户端一定时间不通讯,都要closesocket(socket);
结果下一轮连接的socket值都增加了(这是系统分配),当时我发现,这个socket值一直关闭了再连接socket的值一直是增加的,这样势必会出现溢出(假如存储这个socket的变量)。
因为我这里有一个程序,经过测试(基本运行了两天两夜),socket的值一直是增加的。当超过这个时间段后,程序好像处于死机状态,只有强行关闭该程序的进程,重新启动该程序才运行正常。但操作系统没有死掉。
你有点杞人忧天了,32位值最大允许到42亿多,就算是SOCKET值一直在长,啥时候才能长到42亿?就更不说溢出了。算你一天有100万次连接,也要4200多天。况且SOCKET值也不是一直在长,当关闭SOCKET一段时间后,被关闭的SOCKET值是有可能被复用的。
非常感谢!