关闭SOCKET是不是不能再用了

pleasechangegreat 2008-10-23 02:09:52
sockConn是个全局变量

while(1)
{
sockConn = accept(newSocket,(SOCKADDR*)&addrClient,&len);
...
//closesocket(sockConn );这里能用这个函数吗?

}

还是在程序最后将sockConn关闭?
...全文
245 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwniwei 2008-10-24
  • 打赏
  • 举报
回复
一个accept对应一个close,就不会出错

建议少用全局变量
hunterljm 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pleasechangegreat 的回复:]
引用 6 楼 hunterljm 的回复:
建议把sockConn设置成局部变量,就不会有问题了!accept返回这个sockConn这个套接字后,你对这个sockConn的使的使用都在while循环内,而且你也希望在while循环内将它结束,为什么不设成局部变量呢?


因为我在接下来起的线程里面要用到发送数据send(sockConn,...)
[/Quote]

那你在while循环里关了,线程里的套接字就有可能不能用了!解决的方法是在线程里再关!这样就没问题了。
scq2099yt 2008-10-24
  • 打赏
  • 举报
回复
关闭后再使用需要再打开。
csgdseed 2008-10-24
  • 打赏
  • 举报
回复
在while外面关,或者在线程里面用完后关
dch4890164 2008-10-24
  • 打赏
  • 举报
回复
如果你在线程里用那就在线程里关闭好了
program2050 2008-10-23
  • 打赏
  • 举报
回复
sockConn是个全局变量 

while(1)
{
sockConn = accept(newSocket,(SOCKADDR*)&addrClient,&len);
...
//closesocket(sockConn );这里能用这个函数吗?

}

这样写是正确的。因为建立连接后,accept函数返回一个套接字,得到的是新的套接字。
dadalan 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 pleasechangegreat 的帖子:]
sockConn是个全局变量

while(1)
{
sockConn = accept(newSocket,(SOCKADDR*)&addrClient,&len);
...
//closesocket(sockConn );这里能用这个函数吗?

}

还是在程序最后将sockConn关闭?
[/Quote]

closesocket(sockConn )后sockConn  = -1

此时再调用与sockConn相关的接收,发送操作,系统会报错。
路人乙2019 2008-10-23
  • 打赏
  • 举报
回复
可以用的。
microyzy 2008-10-23
  • 打赏
  • 举报
回复
不会的,不考虑其他的,就你目前的结构来说就应该在这里关闭,下次再accept,这个变量已经变成另外一个socket了,你不关闭,之前的那个socket反而丢了
Win32Coder 2008-10-23
  • 打赏
  • 举报
回复
把sockConn设成局部变量
pleasechangegreat 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hunterljm 的回复:]
建议把sockConn设置成局部变量,就不会有问题了!accept返回这个sockConn这个套接字后,你对这个sockConn的使的使用都在while循环内,而且你也希望在while循环内将它结束,为什么不设成局部变量呢?
[/Quote]

因为我在接下来起的线程里面要用到发送数据send(sockConn,...)
hunterljm 2008-10-23
  • 打赏
  • 举报
回复
建议把sockConn设置成局部变量,就不会有问题了!accept返回这个sockConn这个套接字后,你对这个sockConn的使的使用都在while循环内,而且你也希望在while循环内将它结束,为什么不设成局部变量呢?
hunterljm 2008-10-23
  • 打赏
  • 举报
回复
应该会吧,sockConn是全局变量呢!
frank_323 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pleasechangegreat 的回复:]
引用 1 楼 microyzy 的回复:
可以,在最后才关闭也不是不可以,但是会有泄漏


因为accept在while里面,用closesocket(sockConn );会不会对下次使用sockConn 产生影响呢?
[/Quote]
不会
weidong0210 2008-10-23
  • 打赏
  • 举报
回复
还是放在while()外面好一些
pleasechangegreat 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 microyzy 的回复:]
可以,在最后才关闭也不是不可以,但是会有泄漏
[/Quote]

因为accept在while里面,用closesocket(sockConn );会不会对下次使用sockConn 产生影响呢?
microyzy 2008-10-23
  • 打赏
  • 举报
回复
可以,在最后才关闭也不是不可以,但是会有泄漏

18,356

社区成员

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

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