【发布时间】:2013-12-09 09:31:56
【问题描述】:
我尝试用 C 语言制作一个简单的服务器。 它工作正常。当我添加一个循环来接收连接时, printf() 似乎不起作用。
listen(mysocket, 5);
while (1) {
consock = accept(mysocket, (struct sockaddr*)&client, &socksize);
printf("incoming connection from %s \n", inet_ntoa(client.sin_addr));
send(consock, message, strlen(message), 0);
close(consock);
}
close(mysocket);
如果我删除 while 循环,它会在 printf 函数中显示消息。有循环的地方没有打印出来。
请告诉我这是怎么发生的。我想我在这里遗漏了一些东西。
谢谢!
【问题讨论】:
-
可能是缓冲问题,尤其是当您输出到某个文件或管道时。在 printf 之后尝试 fflush(stdout)。
-
您应始终检查系统调用的结果是否有错误,并帮助您自己记录它们,例如使用
perror()。至少在您显示的来源中相关的是:listen()、accept()、send()和close()。 -
@alk 感谢您的提示。
-
@alk 当然可以,但是在一些示例代码中省略错误检查是完全可以接受的。
-
你关闭
stdout了吗?或者以某种方式重定向它,例如调用daemon()。
标签: c linux sockets unix networking