当前位置:  技术问答>linux和unix

socket编程中的select问题

    来源: 互联网  发布时间:2014-11-21

    本文导语:  诸位老大:   在下是个新手,在开发中遇到如下问题,请指教: 我在用Socket做一个双向平台,即对上是个Client端,对下是个Svr端, 我原来的设计是为每个Socket创建一个线程,然后在其中用recv做阻塞循环即 while(true...

诸位老大:

  在下是个新手,在开发中遇到如下问题,请指教:

我在用Socket做一个双向平台,即对上是个Client端,对下是个Svr端,
我原来的设计是为每个Socket创建一个线程,然后在其中用recv做阻塞循环即
while(true)
{
  ...
  if( recv(m_ClntSock...) > 0)
  {
    数据处理
  }
  ...
}
后来有位老大建议我用Select编程以节省资源,但我遇到以下问题:我的Sock处理线程在select的同时,其它线程有可能删除或创建新的Sock,即需要修改Sock描述符集,
请问:
1.这个修改对于Sock处理线程是否无效?比如说我的其他线程在这组Sock描述符集中增加了一个新socket,当这个socket有数据时Sock处理线程的select能否触发?

2.如果我仍为每个Socket创建一个线程,但用select来做触发(仅监测一个socket)后再
调用recv接收,能否减小cpu 占用?

3.有其他更好的办法吗?




|
1:
会触发,因为线程都是共享数据的,但是要重新调用select。
2:
要看你实际通讯的情况了,如果每一个通讯的时间相对较少的话,可以这样做啊。
3:
要看你实际通讯的模式和情况了。
比如说客户端的连接时间,通讯量等等了。
最好看看电力出版社的《高级TCP/IP编程》


    
 
 

您可能感兴趣的文章:

  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • sco unix下socket编程的问题,请大家帮忙
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • socket通讯使用select的问题
  • socket select异常?
  • select和非阻塞socket的迷惑
  • socket编程select对accept的影响
  • 请教linux下管理多个socket用什么,难道只能用select?
  • socket select()能否取得剩余时间
  • socket中的select模型问题
  • linux下用C写socket程序编程中的select里面的timeout的值的单位到底是什么?
  • 我做了个socket服务器,但是客户端接收数据的时候用select()函数????可接受不到
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • sco unix 下输入 man socket 居然显示 man:socket not found up有分
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 爲何這樣?variable socket might not have been initialized --socket.close()


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3