【发布时间】:2017-12-23 20:01:14
【问题描述】:
我用pthread_create()创建了一个线程来执行一个函数,在函数内部有一个write()函数通过套接字描述符发送数据。如果write()函数发送数据失败(因为socket连接丢失),我的线程就终止了。
write() 失败时我可以保留一个线程吗?
这是我的代码:
void broadcastMsg(char *msg) {
int i=0;
while(1) {
...
...
// My thread terminated from here
if(write(client_database.sock_desc[i], msg, strlen(msg)) < 0) {
client_database.sock_desc[i] = -3;
i++;
continue;
}
i++;
}
}
/* Start thread from this function */
void *cliListener(void *argvp) {
int read_desc;
char buf[MAX_TRANSFER_BUF];
int cli_sock_desc_id = atoi(argvp);
while(1) {
memset(buf, 0, MAX_TRANSFER_BUF);
read_desc = read(client_database.sock_desc[cli_sock_desc_id], buf, MAX_TRANSFER_BUF);
...
...
broadcastMsg(buf);
}
}
int main(void) {
...
...
pthread_t tid_1;
pthread_create(&tid_1, NULL, cliListener, cli_listener_arg);
...
...
}
【问题讨论】:
-
是的,您可以在写入失败后保留线程。多说,比如为什么线程终止了,就需要看代码了。请提供一个最小但完整的示例,但仍然存在相同的问题。
-
没有一个简单的例子我们帮不了你
-
您的帖子正下方有一个按钮edit(它有点小而且灰色,但它就在那里)。您也可以单击此评论中的链接 :) 确保创建 minimal reproducible example;另请阅读How do I ask a good question?。您可能希望至少浏览一次tour,因为它涵盖了非常基础的内容。
标签: c multithreading sockets