【发布时间】:2011-09-08 08:52:20
【问题描述】:
我有一个用 C 语言编写的 AF_INET/SOCK_STREAM 服务器,在 Android/Linux 上运行,看起来更像这样:
...
for (;;) {
client = accept(...);
read(client, &message, sizeof(message));
response = process(&message);
write(client, response, sizeof(*response));
close(client);
}
据我所知,关闭调用不应立即终止与客户端的连接,但它显然会:客户端在有机会读取服务器响应之前报告“对等连接重置”。
如果我在 write() 和 close() 之间插入延迟,客户端可以按预期读取响应。
我得到一个提示,它可能与 SO_LINGER 选项有关,但我检查了它的值,并且 struct linger 的两个成员(l_onoff、l_linger)的值都为零。
有什么想法吗?
【问题讨论】:
标签: c linux sockets posix android-ndk