请问各位有关socket关闭的问题。

sproll 2004-10-09 08:37:48
小弟使用VC+SOCKET API,
在一台主机上创建服务socket,监听端口为5000,再在另一台主机创建一个客户socket,本地端口为6000,然后客户通过链接到服务,服务socket收到链接请求后创建一个子socket去accept。客户数据发送完毕后通过closesocket函数关闭,这时服务收到子socket的关闭消息,然后服务把子socket关闭。
到这儿为止都没有问题,然后客户再通过同一个本地端口6000去链接服务socket的时候,就无法再链接上,但是通过6001等其它端口是可以再链接上的。请问是否小弟在释放客户socket资源的时候(我使用closesocket关闭客户socket的)什么地方有问题?
...全文
148 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sproll 2004-10-11
  • 打赏
  • 举报
回复
谢谢各位的帮忙!暴谢谢中国制造!
gdy119 2004-10-10
  • 打赏
  • 举报
回复
TIME_WAIT状态,6000端口关闭后系统会将此套接口置为TIME_WAIT状态 这个过程
为4分钟;当client closesocket()的时候,client会经历TIME_WAIT(240s)的过程;
而与client对等的服务器上的socket会立即关闭;
一般client不要bind(),如果你一定要用bind()一个端口并在TIME_WAIT
过程中可以使用该端口,用setsockopt的SO_REUSEADDR选项。
batizhou 2004-10-10
  • 打赏
  • 举报
回复
你用netstat看一看client和server端的端口都处于什么状态,
在client端注意看Foreign Address是server IP:Port的那条,
在server端注意看Foreign Address是client IP:Port的那条。
sproll 2004-10-10
  • 打赏
  • 举报
回复
忘了,还有nReuse的定义:
BOOL nReuse = TRUE;
nReturn = setsockopt( m_socClient, SOL_SOCKET, SO_REUSEADDR, (char*)&nReuse, sizeof(nReuse) );
sproll 2004-10-10
  • 打赏
  • 举报
回复
TO batizhou(batizhou):
setsockopt调过了,而且返回0成功了,代码:
nReturn = setsockopt( m_socClient, SOL_SOCKET, SO_REUSEADDR, (char*)&nReuse, sizeof(nReuse) );
不过第二次还是connect不上,connect函数返回WSAEADDRINUSE
小弟关闭客户socket是通过closesocket函数,是不是还需要其它函数的调用?

TO cryptonym(鹧鸪鸟):
第二次还是邦定到6000,但是在connect函数中出错,bind成功的。

TO allenq(黑夜给我黑的眼, 我却用他来翻白眼..........) :
程序要求客户端必须指定本地端口。

TO PiggyXP(【小猪】●至爱VC,至爱网络版●) :
释放除了closesocket是否还需要什么其它的动作?
PiggyXP 2004-10-09
  • 打赏
  • 举报
回复
如果客户端不用监听服务器端的信息的话,就不用bind端口了,这段代码可以不要^_^

不过即使是bind端口也应该不会出现这样的情况,也许你的释放代码有问题
allenq 2004-10-09
  • 打赏
  • 举报
回复
客户端的本地端口不必指定的啊...
服务器接受客户端的连接请求后, 会分配一个随机的端口供子socket去通讯
cryptonym 2004-10-09
  • 打赏
  • 举报
回复
你第二次绑定到6000的时候可以绑定的上吗?
batizhou 2004-10-09
  • 打赏
  • 举报
回复
TIME_WAIT状态,6000端口关闭后系统会将此套接口置为TIME_WAIT状态,为了防止一些意外情况的发生,具体的可以去看《TCP/IP详解》,如果你一定要用6000端口,可以在bind钱用setsockopt的SO_REUSEADDR选项。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧