c - Unix套接字卡在accept()
问题描述
我正在编写一个应该等待客户端连接的服务器。在访问主循环服务器后应该“反弹”这么久accept()
确实返回一个不同的值然后 -1。问题是该accept()
方法正在阻止执行而不是返回任何值。如果没有引发无效参数标志,这可能是什么原因?
贝娄是我的代码的最小可重现示例:
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/unistd.h> // unlink
#define MAX_LISTCLI 5
int main(void) {
uint server_id, len;
struct sockaddr_un server;
if ((server_id = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror("Socket");
exit(1);
}
server.sun_family = AF_UNIX;
strcpy(server.sun_path, "free_socket");
if (unlink(server.sun_path) != -1)
fprintf(stderr, "Server was NOT aboard correctly?\n");
len = (strlen(server.sun_path) + sizeof(server.sun_family));
if (bind(server_id, (struct sockaddr *)&server, len) == -1) {
perror("Bind");
exit(1);
}
if (listen(server_id, MAX_LISTCLI) == -1) {
perror("Listen");
exit(1);
}
_Bool done = 0;
while (!done) {
uint remote_id;
struct sockaddr_un remote;
len = sizeof(remote);
// Bounce if connection was not obtained and wait for the client to connect
printf("Connecting..\n");
if ((remote_id =
accept(server_id,
(struct sockaddr *)&remote ,&len)) == -1) {
fprintf(stderr, "Bounce..\n");
continue;
}
fprintf(stderr, "Connected.\n");
// Replay to the user..
done = 1;
}
close(remote_id);
close(server_id);
unlink(server.sun_path);
return 0;
}
解决方案
推荐阅读
- android - Swiperefresh 布局在嵌套滚动视图内的坐标布局中不起作用
- jmeter - 当我在非 GUI 模式下使用 Jmeter 时,我如何知道有多少 API 请求失败和通过?
- python - 非本地函数如何在 Python 中存储值
- json - 在 cloudformation 中创建 ELB 时出错
- sas - 使用宏变量在 SAS 中创建列
- google-apps-script - 如何将带有格式(图像,图表等)的谷歌文档整个页面内容从谷歌文档文件复制到谷歌文档脚本编辑器中的另一个文档?
- javascript - 我的图像滑块有问题,真的不知道为什么
- android - 当进度条可见时隐藏片段的内容
- jointjs - 如何用纯JointJS实现Rappid提供的拖拽连接功能?
- javafx - 我可以在不绑定每个小部件的情况下使用窗口 JavaFx 的大小调整场景的大小吗?