当前位置: 技术问答>linux和unix
从多个socket接收数据
来源: 互联网 发布时间:2015-05-13
本文导语: 当前条件: 本机同其它的机器建立多个socket,现在要从这多个socket接收数据。 问题: 1. 要是使用pthread_create只建立一个线程,在此线程中使用循环来从每个socket接收数据,则在采用阻塞方式的时候是不是前面...
当前条件:
本机同其它的机器建立多个socket,现在要从这多个socket接收数据。
问题:
1. 要是使用pthread_create只建立一个线程,在此线程中使用循环来从每个socket接收数据,则在采用阻塞方式的时候是不是前面的socket在无数据而被阻塞的时候,其后的socket即使有数据也不会被执行到。要是这样的话,那就只能采用非阻塞方式了?
2. 要想采用阻塞方式接收数据,针对每个socket使用pthread_create创建一个线程的话。岂不针对每个线程都要写一个与socket相对应的接收函数,而这些函数代码完全相同。而且socket的个数是不定的,其个数可以由外部改变的。
以前没有编过多线程程序,也许是我理解有误,有更好的解决方法。还请大家多多指点。
本机同其它的机器建立多个socket,现在要从这多个socket接收数据。
问题:
1. 要是使用pthread_create只建立一个线程,在此线程中使用循环来从每个socket接收数据,则在采用阻塞方式的时候是不是前面的socket在无数据而被阻塞的时候,其后的socket即使有数据也不会被执行到。要是这样的话,那就只能采用非阻塞方式了?
2. 要想采用阻塞方式接收数据,针对每个socket使用pthread_create创建一个线程的话。岂不针对每个线程都要写一个与socket相对应的接收函数,而这些函数代码完全相同。而且socket的个数是不定的,其个数可以由外部改变的。
以前没有编过多线程程序,也许是我理解有误,有更好的解决方法。还请大家多多指点。
|
用select加阻塞socket方式。
当有连接时,创建线程处理。或者用线程池技术,当然这样需要调度。
另外线程的代码段可以是一样的,也就是说相同的代码段可以多次执行成为多个指令流,即线程。
当有连接时,创建线程处理。或者用线程池技术,当然这样需要调度。
另外线程的代码段可以是一样的,也就是说相同的代码段可以多次执行成为多个指令流,即线程。