【发布时间】:2013-01-07 12:03:56
【问题描述】:
我有一个具有多个线程的应用程序,一个线程正在创建 4 个 tcp 连接,然后该线程创建另一个线程,该线程将使用 poll 或其他任何方式处理这 4 个连接的接收函数,以及原始线程(第一个)开始向这 4 个连接发送消息(循环)。就像下面的伪代码,
main()
{
pthread_create( &thread1, NULL, sending_thread, (void*) args);
}
void *sending_thread( void *ptr )
{
int i=0;
int *connections;
connections = create_connections();
pthread_create( &thread1, NULL, receiving_thread, (void*)&connections);
while(1) {
send(connections[i], "test");
i++;
if (i > 3)
i=0;
}
}
void *receiving_thread( void *ptr )
{
char *msg;
msg = receive(connections[i]);
save_received_msg_to_disk(msg);
}
我的问题是如何检查我的连接并打开断开的连接?例如,假设connection1出现故障,我是否需要使用相同的fd创建另一个连接,在这种情况下是connection[1]?还是有其他方法可以处理这种情况?
Linux环境是C/pthread
【问题讨论】:
-
您是否必须使用单独的发送和接收线程这样做?
-
这种方式不是更快,你有什么建议?
-
不一定。在单个线程的非阻塞套接字上尝试
epoll(7)。衡量,比较。 -
我用那个是因为receive是异步的,不知道怎么用epoll来收发,有例子或者教程分享一下吗?
-
从这里开始 stackoverflow.com/questions/27247 ,当然这一切都取决于你想要做什么。
标签: linux sockets tcp pthreads