Spi*_*ire 3 c sockets blocking
我在我的服务器上创建了一段代码作为多线程
问题是,当我在另一个套接字上接收时,它不会发送数据.
因此,如果我向客户端2发送一些内容到客户端2,则client2仅在他自己发送内容时才会收到(跳出recv函数)..我该如何解决这个问题?
/* Thread*/
while (! stop_received) {
nr_bytes_recv = recv(s, buffer, BUFFSIZE, 0);
if(strncmp(buffer, "SEND", 4) == 0) {
char *message = "Text asads \n";
rv = send(users[0].s, message, strlen(message), 0);
rv = send(users[1].s, message, strlen(message), 0);
if (rv < 0) {
perror("Error sending");
exit(EXIT_FAILURE);
}
}else{
char *message = "Unknown command \n";
rv = send(s, message, strlen(message), 0);
if (rv < 0) {
perror("Error sending");
exit(EXIT_FAILURE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
更具体一点,有几种类型的I/O. 你目前所做的是阻塞i/o.一般来说,这意味着当你打电话send或recv操作将"阻止"直到它完成.
与此相反,存在所谓的非阻塞i/o.在此i/o模型中,如果操作无法完成,则操作将立即返回.通常,该select函数与此i/o模型一起使用.
您可以在Select Tutorial中看到示例程序.完整的源代码位于页面底部.
正如其他人所说,你的另一个选择是使用线程.
| 归档时间: |
|
| 查看次数: |
2099 次 |
| 最近记录: |