关于linux下关闭socket的问题

xiapingsheng 2008-01-14 09:55:00
如果在客户端,刚刚建立连接的时候,通常要等待很长时间, 如果我在一个线程中连接,另外一个线程中一段时间后用close(sockfd)的办法,能否使连接中断返回,这样做有没有什么不妥之处?
...全文
1462 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
black_eye_ 2008-01-16
  • 打赏
  • 举报
回复
用线程这样不好,
考虑下调整连接超时的时间应该更方便
ceasar1134 2008-01-16
  • 打赏
  • 举报
回复
没试过,我估计不行。因为你的connect()进行已经进入内核,你的另外一个线程close()掉这个socket_fd我估计close()函数会返回一个错误.
正确方法应该是将connect()加一个timeout值,这样你就可以确定connect()在指定的时间返回...
cnwolf 2008-01-15
  • 打赏
  • 举报
回复
close 只是关闭socket的一个句柄

知道这个socket所有的句柄都被关掉之后,内核中的socket才会断开

一般多线程中是共享socket句柄,只需要关闭一次就好了

多进程中在fork时复制了socket句柄,需要在每个进行close一次才会最终断开socket
hnhbdss 2008-01-15
  • 打赏
  • 举报
回复
no problem
cceczjxy 2008-01-15
  • 打赏
  • 举报
回复
可以的
yalogr 2008-01-15
  • 打赏
  • 举报
回复
你要弄清楚是进程还是线程,如果是线程的话,线程之间共享数据,文件描述符表,内存空间....所以你close(fd)后,fd被关闭,连接自然也就断开.如果父线程再次close(fd)的话,那就出错了.
还有在线程中最好不要调用exit,_exit之类的,他们会使整个进程退出.
pottichu 2008-01-14
  • 打赏
  • 举报
回复
能返回, 貌似也没啥不托.
littlefirebug 2008-01-14
  • 打赏
  • 举报
回复
这两个线程在同一个进程空间嘛?
如果是的话应该可以

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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